簡體   English   中英

創建對象時,使用JavaScript使對象的成員函數調用的正確方法是什么?

[英]What is the proper way in JavaScript to make an object's member function invoke when the object is created?

所以我的情況就像

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

我希望在創建新的MyObject時調用MyMemberFunction 所以我想要相當於

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

要么

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

但我想知道是否有比這兩種方法更好的方法,即更合適的方法?

在對象的構造函數中,應按正確的工作順序初始化對象,並在其中放置應為對象的所有新創建調用的任何代碼。 一個對象具有一個.init()方法是很常見的,該方法從構造函數中調用,該構造函數為該對象執行通用的設置代碼。

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

您確實在定義方法的位置還有另一個選擇。 將其放在原型上而不是在構造函數中進行分配可能很有意義。

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

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


var myObjectInstance = new MyObject(allData);

注意:Javascript中的一個常見約定是,構造函數以大寫字母開頭,而常規函數或成員以小寫字母開頭。 由於應該以不同的方式調用構造函數(使用new ),因此以不同的方式標識它們。

注意:如果您的初始化方法不必是可以從外界調用的公共方法,那么它不必是對象上的實際公共方法。 您可以將代碼內聯到構造函數中或僅在對象文件范圍內可用的私有函數中。

這是使用prototype另一種選擇:

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

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

var myObjectInstance = new Person(allData);

但是,我不能說這是“更好”,因為這絕對取決於您在開發什么

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM