2
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),但我正在寻找更好的方法,因为有很多对象,我不想全局化所有内容。

4

3 回答 3

4

使用闭包。

function Orange(){
    this.name="orange";

    this.apple = new Apple();
    var that = this;
    this.apple.onCalled=function() {
        alert(that.name);
    }
}

阅读关键字this在 JS 中的工作原理,这有点棘手但很容易掌握。

于 2012-07-02T16:42:06.783 回答
1

你可以写:

Orange.prototype.onCalled=function(){
    this.apple.onCalled.call(this);
}

很难给出一个普遍的答案。要理解的是,this它受任何函数调用的约束。这可以通过callor函数显式控制,或者在将函数作为对象的属性访问时apply由操作员控制。.

Kos 给出的关于使用闭包的答案也可能是相关的;这取决于你想要的效果。

于 2012-07-02T16:42:03.473 回答
1
Orange.prototype.onCalled=function(){
    this.apple.onCalled.call(this);
}

示例:http: //jsfiddle.net/XrtZe/

看看:JavaScript 中的作用域

于 2012-07-02T16:42:12.680 回答