0

我讀過,我們可以調用一個匿名函數作爲變量。不過,我試圖做到這一點,除此之外,我想訪問它的屬性和方法。這裏是我的代碼Javascript - 如何調用匿名方法作爲變量並訪問其屬性和方法?

var cooking = function(){ 
     this.dessert = "Ice Cream"; 
     this.numberOfPortions = 20; 
     this.doubleLunch = function(){this.numberOfPortions = 40; 
      document.write(this.numberOfPortions);}; 
     }; 

document.write(cooking.dessert); 

但我沒有得到任何東西。你能說我做錯了什麼嗎?謝謝

回答

1

cooking是一個函數。 當您將其稱爲時,它會定義許多this所屬的屬性。

該結構意味着它被用作構造函數,因此您可以使用new關鍵字創建它的實例。

然後你可以與實例進行交互。

var meal = new cooking(); 
document.write(meal.dessert); 

注:約定規定構造函數(也是唯一的構造函數)應該開始以大寫首字母來命名,所以你應該把它重命名爲烹飪。

+0

絕對還有它賦值給一個變量是沒有意義的。只是'功能烹飪(){...}'更有意義。 – Jan

+0

這也將它分配給一個變量。一般來說,我會建議通過匿名函數表達式的函數聲明。 – Quentin

+0

@Quentin謝謝你的回答,但爲什麼有必要創建它的一個實例。例如,當我執行它顯示了數字7。是因爲這個函數不同於我的第一個? – GniruT

1

this當該函數作爲構造函數調用時,可以通過使用立即調用的函數表達式(IIFE)來引用自身。

var cooking = (function() { 
    return new function() { 
     this.dessert = "Ice Cream"; 
     this.numberOfPortions = 20; 
     this.doubleLunch = function() { 
      this.numberOfPortions = 40; 
      document.write(this.numberOfPortions); 
     }; 
    } 
})(); 

document.write(cooking.dessert); 

DEMO:http://jsfiddle.net/fk4uydLc/1/

但是,您可以通過使用普通的舊JavaScript對象(PO​​JO)實現相同的結果。

var cooking = (function() { 
    var obj = {}; 

    obj.dessert = "Ice Cream"; 
    obj.numberOfPortions = 20; 
    obj.doubleLunch = function() { 
     obj.numberOfPortions = 40; 
     document.write(obj.numberOfPortions); 
    }; 

    return obj; 
})(); 

document.write(cooking.dessert); 

DEMO:http://jsfiddle.net/vmthv1dm/1/

如果你打算使用構造函數多次隨後的辦法@Quentin提到的是要走的路。

function Cooking() { 
    this.dessert = "Ice Cream"; 
    this.numberOfPortions = 20; 
    this.doubleLunch = function() { 
     this.numberOfPortions = 40; 
     document.write(this.numberOfPortions); 
    }; 
} 

var cooking = new Cooking(); 

document.write(cooking.dessert); 

DEMO:http://jsfiddle.net/jsd3j46t/1/

+0

感謝您的回答。我在另一個答案中進行了相同的預約。爲什麼有必要創建它的一個實例。例如,當我執行它顯示數字7。是否因爲這個函數與我的不同第一?因爲'this',所以 – GniruT

+0

。 'this'只有在它是一個實例時才引用它,這就是爲什麼你需要使用'new'。否則'this'是外部範圍,在這種情況下是'window'對象。 http://jsfiddle.net/jsd3j46t/ –

+0

我使用「this」是因爲我想聲明一個函數對象的屬性。我錯了嗎?有其他方法嗎? – GniruT