对象成员函数的回调?(Javascript)

Callback of a object member function? (Javascript)

本文关键字:Javascript 回调 成员 函数 对象      更新时间:2023-09-26
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/

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

当你执行x.y(this.x)时,this是对窗口的引用,而不是a的实例。我想你可能打算是:

x.y(x.x);

由于xa的实例,这会将对ax方法的引用传递给a的这个实例的y方法。

当你执行x.y(foo)时,foo是在此作用域中声明的函数,因此您将对foo函数的引用传递到xy方法中。

我刚刚重命名了您的变量以消除混淆。

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'。所以,a()的函数x()y(),应该称为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