上卷
p86
function foo() {
console.log( this.a );
}
function doFoo(fn) {
// fn 其实引用的是
foo fn(); // <-- 调用位置!
}
var obj = {
a: 2,
foo: foo
};
var a = "oops, global"; // a 是全局对象的属性
doFoo( obj.foo );
foo函数的调用位置为全局??
p92
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过程是怎么执行的:
1、新创建一个空对象
2、对象的指针指向obj1的foo函数
3、执行foo函数内的代码,创建新对象的属性a=4
4、返回新创建的对象,赋值给bar
p99
function foo() {
// 返回一个箭头函数
return (a) => {
//this 继承自 foo()
console.log( this.a );
};
}
var obj1 = {
a:2
};
var obj2 = {
a:3
};
var bar = foo.call( obj1 );
bar.call( obj2 ); // 2, 不是 3 !
注意点: 箭头函数的this指向定义时的this,而非运行时;