函数参数的 JavaScript 执行上下文
JavaScript execution context of function argument
function Apple(){
this.name="apple";
}
function Orange(){
this.name="orange";
this.apple = new Apple();
this.apple.onCalled=function(){
alert(this.name);
}
}
Orange.prototype.onCalled=function(){
this.apple.onCalled();
}
var orange = new Orange();
orange.onCalled();
目前代码显示"苹果"。如何修改"this.apple.onCalled=function()"行,使其显示"橙色"?
即我想将一个函数传递给另一个对象,但是当调用该函数时,访问传递该函数的对象的变量,而不是执行该函数的对象的变量。一个明显的解决方案是使用全局变量(例如 orange.name),但我正在寻找一种更好的方法,因为有很多对象,我不想全局所有内容。
使用闭包。
function Orange(){
this.name="orange";
this.apple = new Apple();
var that = this;
this.apple.onCalled=function() {
alert(that.name);
}
}
阅读关键字this
在JS中的工作原理,这有点棘手,但很容易掌握。
你可以
这样写:
Orange.prototype.onCalled=function(){
this.apple.onCalled.call(this);
}
很难给出一个笼统的答案。 要理解的是,this
绑定在任何函数调用上。这可以使用call
或apply
函数显式控制,也可以在访问作为对象属性的函数时由.
运算符显式控制。
Kos给出的关于使用闭包的答案也可能是相关的;这取决于你想要的效果。
Orange.prototype.onCalled=function(){
this.apple.onCalled.call(this);
}
示例:http://jsfiddle.net/XrtZe/
看看: JavaScript 中的范围
相关文章:
- 执行上下文和变量对象在 JavaScript 中实际上是一回事吗?
- javascript中的全局和局部变量执行上下文
- 执行上下文和Javascript中的执行上下文对象
- 函数参数的 JavaScript 执行上下文
- 逗号运算符是否会影响 Javascript 中的执行上下文
- 执行上下文和闭包
- Java 脚本 eval() 函数属于哪个对象?此外,在调用 eval() 函数时传递执行上下文
- JavaScript 范围和执行上下文
- 如何在 JavaScript 中动态地向当前执行上下文添加属性
- 任何用于 JavaScript 执行上下文可视化的现有工具
- 为什么此处未创建执行上下文
- 是否可以传递立即调用的函数表达式的执行上下文
- 如何确定 JavaScript 回调函数的执行上下文
- Node.js获取执行上下文的编程模式
- JavaScript中的执行上下文
- 获取javascript函数的绑定执行上下文
- 了解 JavaScript 提升和执行上下文
- 什么是'执行上下文'在JavaScript中
- 全局执行上下文是否可能从执行堆栈中弹出
- d3.js/CoffeeScript:访问mouseover中类和路径的执行上下文(this)