簡體   English   中英

對象成員函數的回調? (JavaScript)的

[英]Callback of a object member function? (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/

當我傳遞對象成員函數時,為什么未定義? 有沒有一種方法可以將對象成員函數作為回調傳遞?

當你做xy(this.x) this是對窗口的引用,而不是一個實例a 我想您可能打算做的是:

x.y(x.x);

因為x是的一個實例a ,這個傳遞給一個參考x的這個實例的方法ay的此實例的方法a

當您執行xy(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'。 因此,功能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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM