我看到了一些看起来像这样的代码:
function foo(bar) {
this.bar = bar;
};
你能像这样重写它吗:
function foo(bar) {
var bar = bar;
};
因为那样你就不需要继续写this
哪个更好了。这两段代码做同样的事情吗?
非常感谢。
我看到了一些看起来像这样的代码:
function foo(bar) {
this.bar = bar;
};
你能像这样重写它吗:
function foo(bar) {
var bar = bar;
};
因为那样你就不需要继续写this
哪个更好了。这两段代码做同样的事情吗?
非常感谢。
this
这将创建一个对象的属性。它是公开的,具有读写访问权限。根据调用函数的方式(使用new
?),this
将指向不同的对象。 更多关于这里的主题。
function foo(bar) {
this.bar = bar;
};
foo(10);
console.log(bar); // bar or this.bar .. prints 10
var tmp = new foo(20);
console.log(tmp.bar); // prints 20
console.log(bar); // still prints 10
var
这将创建一个局部变量(注意:该变量已经通过函数参数在范围内)。这是本地的,只能从foo
函数的范围内访问。
function foo(bar) {
var bar = bar;
}
除非您编写 oo js,否则您可能希望坚持使用第二个选项,甚至更好 - 跳过bar
任何重新定义。您可以获得封装的所有常见好处。
function foo(bar) {
// just use argument bar
}
它们是不相同的。在第一个示例中,您正在创建一个在对象上调用的新属性bar
,foo
这意味着您可以这样做以从函数外部访问分配的值(用作对象构造函数):
function foo(bar) {
this.bar = bar;
};
var f = new foo(1);
console.log(f.bar); // => 1
在第二个示例中,您正在创建一个名为的变量,该变量bar
在函数之外是不可访问的。
不同之处在于您的函数范围内是否有 otehr 函数,如下所示:
function foo(bar) {
var foo = bar;
alert(bar); //works
$.ajax({
[....],
success : function(response) {
alert(bar);//not works
alert(foo);//works
}
});
};
function foo(bar) {
this.bar = bar;
// this == window -if foo()
// this == a -if a = new foo();
};
foo('asd'); // assigns 'asd' to global variable window.bar
console.log(bar); //logs 'asd' (window.bar)
var a = new foo('asd');
console.log(a.bar); // logs 'asd'
console.log(bar); // logs undefined
function foo(bar) {
var bar2 = bar; //bar2 acts only in scope of this function
};