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
//在下列代码中,隐式绑定obj1.foo和new绑定同时出现。最终obj1.a结果是2,而bar.a结果是4,说明this被绑定在bar上
var bar = new obj1.foo( 4 );
console.log( obj1.a ); // 2 ?这个时候为什么不是4,而是2
console.log( bar.a ); // 4
javascript 里,普通调用函数,跟用
new
调用构造函数,使用的是两种不同 this 绑定的策略。这里是用 new 构造,所以使用 new 调用构造函数的策略,与“隐式绑定”无关。
使用 new 调用构造函数的时候,this 是绑定到一个新对象上的。在这个 script 里,就是最后返回并赋值给了 bar 的对象,与 obj1 无关。所以 obj1.a 并没有变化。