2010-04-18 93 views
11

我有以下的Javascript代碼如何調用同一對象內的對象的函數?

add_num = { 
    f: function(html, num) { 
    alert(this.page); 
    }, 

    page : function() { 
    return parseInt(this.gup('page')); 
    }, 

    gup : function(name) { 
    name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]'); 
    var regex = new RegExp('[\\?&]'+name+'=([^&#]*)'); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
     return ''; 
    else 
     return results[1]; 
    } 
} 

但是當我打電話add_num.f()我從警報得到()是頁面的實際代碼。也就是,它返回

function() { 
    return parseInt(this.gup('page')); 
    } 

我期待一個數值而不是任何代碼。

+0

你實際上並不*調用函數 - 只是將它作爲一個對象傳遞給'alert()'。嘗試'alert(this.page());'。 – 2010-04-18 07:36:03

回答

8

那是因爲你需要調用page功能:的

alert(this.page()); 

代替

alert(this.page); 
4

您正在警告函數本身,而不是執行它的結果。 你應該這樣做:

alert(this.page()); 
3

的原因是,文字不是一個函數,因此沒有(可見的)構造函數,因此'this'將引用調用對象。

當然,如果您將此文字分配給函數的原型,這是不正確的,但我猜這不是這種情況。

此外,達林是正確的,你正在返回的功能,而不是執行它。

只需明確指出該對象,例如, add_num.page()。

add_num = { 
    f: function(html, num) { 
    alert(add_num.page()); 
    }, 

    page : function() { 
    return parseInt(add_num.gup('page')); 
    }, 

    gup : function(name) { 
    name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]'); 
    var regex = new RegExp('[\\?&]'+name+'=([^&#]*)'); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
     return ''; 
    else 
     return results[1]; 
    } 
} 
+0

使用'this'明確調用對象是不好的做法嗎? – Blexy 2015-05-07 00:07:48

相關問題