簡體   English   中英

Javascript構造函數創建對象與常規對象

[英]Javascript constructor function creating object vs regular object

抱歉,標題可能令人誤解,但我想知道為什么這種創建對象以及添加屬性和方法的方法:

//A)
var myObjCreatedByFunction = function() {
  this.prop1 = "a";
  this.func1 = function() {
   alert("a");
  }
};

然后使用原型創建其他方法

myObjCreatedByFunction.prototype.func2 = function() { ... }

優先於簡單和簡單的創建對象:

//B)
var myObj = {
  prop1: "a",
  func1: function() {
   alert("a");
  }
};

並通過添加新方法

myObj.func2 = function() { ... }

如我所見,即使某些技術開發人員以后不再創建新實例,他們也會使用第一種方法並使用原型。

此外,在兩個示例中都優先使用IIFE,如果可以,為什么? (最近我看到了很多這種用法)

var myObjIIFE = (function() {
return {
  prop1: "a",
  func1: function() {
   alert("a");
  }
}
})());

有人可以解釋一下我什么時候應該使用第一種方法,第二種和第三種方法,為什么? 謝謝!

B僅對單個實例有用。 它沒有提供像A那樣使用那些方法和屬性來創建該類型的多個實例的方法。 如果您想要/需要的只是一個實例,那么B就很好,並且可能更易於表達和遵循。

關於是將原型用於方法還是在構造函數中分配原型,已有很長的討論(請參閱先前的參考資料 ,還有許多其他此類討論)。 使用原型,然后使用new運算符創建新對象將節省內存(因為所有方法均由所有實例共享)。 在構造函數中分配它們可以訪問私有實例變量(構造函數中的局部變量),並且在執行給定方法時具有更好的性能。

IIFE是某些人選擇采用的模式。 它沒有為您的工作帶來任何好處,但確實提供了一個存儲“私有類變量”的范圍,該變量由所有實例共享,但外界無法訪問。 顯示它的方式並不是我的最愛,因為關於對象的所有信息都沒有。 它只是具有屬性的普通對象。 在某些情況下(尤其是在調試中,但有時在編碼中),了解您擁有的對象類型可能很有用。

暫無
暫無

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

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