2013-04-25 53 views
1

是否有一個名稱用於描述您可以在Javascript中定義對象的不同方式?不同Javascript對象的名稱對象表示法

有這種方法是更「類像」:

function MyObject() { 

    this.aMethod= new function(){ 
    }; 

    this.anotherMethod = new function(){ 
    }; 
} 

而這種其它技術這是更「動態」。

MyObject = new Object(); 
MyObject.aMethod= new function(){ 
}; 
MyObject.anotherMethod = new function(){ 
}; 

我一直使用的以不同的方式這些技術,我瞭解每個的好處,但對我的生活,我沒有任何想法如何討論這個的時候調用這兩個技術與colleauges。

這些技巧是否有名字?

+1

的'new's之前的函數表達式在技術上是有效的,但結果將是'aMethod' (和'anotherMethod')引用空對象而不是函數。 – 2013-04-25 13:21:55

回答

3

在第一種情況下MyObject構造函數,因爲它應該與new被稱爲:

var obj = new MyObject(); 

在第二種情況下,MyObject只是一個對象,你分配屬性給它。它沒有特殊的名字。

請注意,在這兩種情況下,MyObject都有不同的值。第二種情況下的MyObject等於obj

的第三種方法是使用一個對象initilizer或「對象常量」:

var obj = { 
    aMethod: function(){}, 
    anotherMethod: function(){} 
}; 
+0

謝謝,所以要記住的關鍵是'構造函數',普通對象和'對象字面' – 2013-04-25 14:04:36

+0

順便說一句,我可以使用新的,當我有一個對象字面aMethod = new function(){}; ?最後有什麼區別? – 2013-04-25 14:05:51

+1

無論何時你有'new' +函數引用,你實際上都是*調用函數作爲構造函數。所以'aMethod = new function(){};'相當於'aMethod = {}',即將一個空對象分配給屬性或變量。在哪個上下文中執行並不重要。你可以使用它,如果這是你想要的。但是如果你真的想分配一個函數(屬性名稱爲'aMethod'),那麼使用'new'就是錯誤的。如果我想讓一個變量包含字符串'「foo」',我不會爲其指定數字'5'。 – 2013-04-25 14:16:41

2

你的第一個例子是一個Object構造,而第二個是簡單地增加公共方法作爲屬性的一個對象。作爲一個側面說明,對於更「類像」的行爲採取看看module pattern

var MyObject = (function() { 

    var privateStaticVariable = 0; 

    var my = function() { 
    var self = this; 

    var privateInstanceVariable = 0; 

    function privateInstanceMethod() { 

    } 

    self.publicInstanceVariable = 0; 

    self.publicInstanceMethod = function() { 

    }; 
    }; 

    function privateStaticMethod() { 

    }; 

    return my; 
}); 
+0

所以模塊模式使您能夠定義私有和公共方法? – 2013-04-25 14:12:41

+0

是的,任何附加到構造函數內的'self'對象都可以公開訪問,而其他變量和函數保持私有。用於在JavaScript中提供適當的封裝。 – ljfranklin 2013-04-25 14:37:40

相關問題