看书时You Don't Know JS: this & Object Prototypes
我发现这个关于this
的例子绑定(bind):
function foo(something) {
this.a = something;
}
var obj1 = {
foo: foo
};
var obj2 = {};
obj1.foo( 2 );
console.log( obj1.a ); // 2
obj1.foo.call( obj2, 3 );
console.log( obj2.a ); // 3
var bar = new obj1.foo( 4 );
console.log( obj1.a ); // 2
console.log( bar.a ); // 4
我不明白为什么执行 new obj1.foo(4) console.log(obj1.a)
后打印2
而不是4
。如果我评论行 obj1.foo(2)
上面日志的结果是 undefined
.
最佳答案
因为任何函数都可以是构造函数。想象一下,如果您单独使用 foo
:
var obj3 = new foo(3);
您也希望得到一个类似的对象{ a: 3 }
,对吗?
即使该函数附加到其他东西上,它仍然有效。每次使用 new
时,您都会创建一个新对象,而不是更改现有对象。
在第一个实例中,您将函数用作方法:
obj1.foo(2);
在本例中,上下文设置为 obj1,因为它是调用它的上下文。但是,当您使用 new
时,会创建一个全新的对象,并且该新对象将用作上下文。
关于Javascript [this] 关键字与 new 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35235576/