var x='window object';
var mod = {
x: 1,
test: function () {
console.log(this.x);
}
};
mod.test(); //1
var a=mod.test;
a(); //window object
首先,this 指的是 函数被调用时,调用该函数的对象。
从上面例子可以看出, this 从mod对象变成了window对象。 那么直接 mod.test() 和 a() 这种方式有什么区别呢?
关键在于: var a = mode.test; 这句话!
在Javascript 中 的对象赋值时,传递的是 对象的地址。那么a只是获取了 test 函数体代码所存储的地址。this 依旧是 this,并没有被指定为 mod 对象。
所以,在调用 a() 时, this 指向了 window 对象。因为是在全局对象中调用该函数。
那么回到上次讨论的:
var slice = Array.prototype.slice;
slice.call([1,2,3], 0, 1); // [1], 成功
var slice = Array.prototype.slice.call;
slice([1,2,3], 0, 1); // 报错!
var slice = Function.prototype.call.bind(Array.prototype.slice);
slice([1,2,3], 0, 1); // [1], 成功