回调一个对象成员函数? (JavaScript)的

时间:2012-02-19 10:09:24

标签: javascript

var a = function(){

    this.x = function(){alert('apple');}
    this.y = function(callback){
        if(typeof callback == 'undefined' || callback == null)
            alert('argh')
        else
            callback();
    }
}
var foo = function(){alert('blah')};
var x = new a();
x.y(this.x); // why is this one undefined
x.y(foo); // works as expected

这是jsfiddle链接:http://jsfiddle.net/W7FyZ/2/

当我传入对象成员函数时,为什么它未定义?有没有办法将对象成员函数作为回调传递?

3 个答案:

答案 0 :(得分:4)

执行x.y(this.x)时,this是对窗口的引用,而不是a的实例。我想你的意图是:

x.y(x.x);

由于xa的一个实例,因此会将此x实例的a方法的引用传递给此y方法a的实例。

执行x.y(foo)时,foo是在此范围内声明的函数,因此您将foo函数的引用传递给y x方法}}

答案 1 :(得分:0)

我刚刚重命名了你的变量以清除混乱。

var a = function(){
    this.x = function(){alert('apple');}
    this.y = function(callback){
        if(typeof callback == 'undefined' || callback == null)
            alert('argh')
        else
            callback();
    }
}
var foo = function(){alert('blah')};

现在,在执行部分:

var myA = new a();

上面一行是赋值函数a()变量'myA'。因此,x()的函数y()a()应该被称为myA.x()myA.y()

x.y(myA.x); // it works 
x.y(this.myA.x) // This also works as this is a current window
x.y(foo); // works as expected

答案 2 :(得分:0)

西蒙·贝茨(Simon Bates)有一个很好的讨论,包括多种方法来实现这一目标: http://bitstructures.com/2007/11/javascript-method-callbacks.html