2015-12-18 80 views
1

所以我的情況是這樣什麼是JavaScript中創建對象時創建對象的成員函數的正確方法?

function MyObject (data) 
{ 
    // ... 
    this.MyMemberFunction = function () { /* ... */ }; 
} 

,我想MyMemberFunction創建一個新的MyObject時調用。所以,我想的

var myObjectInstance = new MyObject(allData); 
myObjectInstance.MyMemberFunction(); 

function MyObject (data) 
{ 
    // ... 
    this.MyMemberFunction = function () { /* ... */ }; 
    this.MyMemberFunction(); 
} 
var myObjectInstance = new MyObject(allData); 

等價,但我不知道是否有更好的,即更合適的,這樣比任何那些?

回答

2

一個對象的構造函數,你應該初始化一個對象,使其處於正常的工作狀態,並且它應該放置任何應該爲對象的所有新創建而調用的代碼。一個對象有一個.init()方法是非常常見的,該方法從執行該對象的通用設置代碼的構造函數中調用。

因此,在構造函數中調用您的方法是正確的,如果它包含應始終在所有新對象上調用的代碼。

對於定義方法的位置,您還有其他選擇。把它放在原型上而不是在構造函數中賦值是有意義的。

function MyObject (data) { 
    // ... 
    this.myMemberFunction(); 
} 

MyObject.prototype.myMemberFunction = function () { /* ... */ }; 


var myObjectInstance = new MyObject(allData); 

注:在JavaScript中常見的約定是構造函數用大寫字母開頭,但對於普通的功能或成員以小寫字母開始。由於構造函數應該以不同的方式調用(使用new),這可以區別它們。

注意:如果您的初始化方法不需要是可以從外部調用的公共方法,那麼它不必是對象上的實際公共方法。您可以將代碼內聯放在構造函數中,也可以放在只在對象文件範圍內可用的私有函數中。

+0

我很困惑我的'myFunctionFunction'來自您的代碼示例 –

+0

myFunctionFunction在原始問題中。 –

+0

@SubparWebDev - 這是從OP的問題複製,不知道爲什麼它不匹配問題中的聲明和調用(可能只是一個錯字)。我編輯了myMemberFunction()的答案。 – jfriend00

0

這是另一種選擇使用prototype

var Person = function (data) 
{ 
    // ... 
    this.doSomething(); 
} 

Person.prototype.doSomething = function () { /* ... */ }; 

var myObjectInstance = new Person(allData); 

但是,我不能說這是「更好」,因爲它確實取決於你在開發

相關問題