2012-02-06 34 views
0

我有幾個JavaScript對象,每個都有一個設置方法。它們的代碼都是相同的,所以我創建了一個名爲setupMain的函數。然後對於對象的每個實例,我試圖將它的設置值設置爲setupMain。像下面的東西......但是當我在創建實例之後查看設置值時,它會返回undefined而不是指向setupMain函數。任何想法爲什麼?謝謝。在JavaScript中指定另一種方法的方法

var customObject = function(){ 
    this.title = ""; 
} 
var setupMain = function(obj){ 
    obj.title = "initial setup value"; 
} 

var co = new customObject(); 
co.setup = setupMain(co); 
+3

'co.setup'未定義,因爲您調用了函數'setupMain',它沒有返回值。 – 2012-02-06 17:06:05

+0

好的,那我該怎麼回來才能讓它分配函數,它的內容是co.setup?謝謝。 – 2012-02-06 17:10:29

+0

在下面添加我的答案,讓我知道如果它不清楚。 – 2012-02-06 17:21:44

回答

1

你可能會尋找這樣的事情:

var customObject = function(){ 
    this.title = ""; 
} 
var setupMain = function(){ //"This" will point to instance, such as co 
    this.title = "initial setup value"; 
} 

var co = new customObject(); 
co.setup = setupMain; //Reference to function 

co.setup(); //Call the setup function 
window.alert(co.title); 

另外,如果你不希望有保留每段時間設定setup函數來創建一個實例,你可以將它原型:

customObject.prototype.setup = setupMain; //Now, every customObject has a setup function 
var co = new customObject(); 
co.setup(); 
window.alert(co.title); 

最後,如果你不想有打電話setup();每一次,你可以使用const內調用setup ructor:

var customObject = function(){ 
    this.setup(); //Call shared setupMain function because it's part of the prototype 
} 
var setupMain = function(){ 
    this.title = "initial setup value"; 
} 

customObject.prototype.setup = setupMain; //This can be shared across many prototypes 

var co = new customObject(); 
window.alert(co.title); 
+0

謝謝。這是一個很大的幫助。 – 2012-02-06 17:28:57

+0

沒問題,留着吧! – 2012-02-06 17:31:05

0

您的代碼評估setupMain(共),並將結果指定給c.setup ...因此:爲 「初始設置值」

  • setupMain

    • setupMain套co.title返回undefined
    • co.setup設置爲undefined

    你應該在功能分配給您的變量,如:

    var setupMain = function() { 
        this.title = "initial setup value"; 
    } 
    ... 
    co.setup = setupMain; // Without the() 
    
  • 相關問題