为什么在javascript中如果将对象方法引用到某个变量,则会丢失该对象上下文.无法找到任何链接,解释引擎盖下发生的事情.除了这个说明: 'this'指的是'拥有'不接缝为真的方法的对象.
var Class = function() {
this.property = 1
}
Class.prototype.method = function() {
return this.property;
}
var obj = new Class();
console.log(obj.method() === 1);
var refToMethod = obj.method; // why refToMethod 'this' is window
console.log(refToMethod() !== 1) // why this is true?
var property = 1;
console.log(refToMethod() === 1)
Run Code Online (Sandbox Code Playgroud)
这取决于函数的调用方式。如果函数不是通过对象的属性(例如refToMethod)来引用的,那么它将被分配“全局上下文”,即window。但是,当函数是对象的属性(例如obj.method)时,我们将其称为方法,并且它被隐式分配其父对象的上下文。
JavaScript 的上下文与许多语言不同,您可以使用 或 轻松覆盖.call()它.apply()。此外,ECMAScript 5 引入了一种新.bind()方法,允许您创建始终绑定到相同上下文的方法的副本。请参阅 MDN 了解更多信息。
var obj = new Class();
obj.method(); // 1;
var unbound = obj.method;
unbound(); // undefined;
// Call and Apply setting the context to obj.
unbound.apply(obj); // 1
unbound.call(obj); // 1;
// ECMAScript 5's bind
var bound = unbound.bind(obj);
bound(); // 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
514 次 |
| 最近记录: |