簡體   English   中英

需要JavaScript原型說明

[英]JavaScript Prototype explanation needed

我通常在項目中以這種方式創建類...對象文字。

var objectName = {

     //global variables
      a : 'somevalue',

      func1: function(){

      },


      func2: function(){

      }

}

如果必須將其轉換為原型格式,該怎么辦?

當使用這種格式完成工作時,使用原型比使用原型有什么優勢?

人們為什么對原型這么講。

變成原型看起來像:

var someObject = function() {
    this.a = "somevalue";
};

someObject.prototype.func1 = function() { // work };
someObject.prototype.func2 = function() { // work };

var myObject = new someObject();

有哪些優勢? 好了,有很多,但是當原型比對象字面量更具意義時,有一些實際的實際原因。

首先是減少重復代碼; 因此,可以說你想另一個對象非常smiliar到objectName ,但是你想a是一個不同的值。 您可能最終會得到以下結果:

var objectName = {
      a : 'somevalue',
      func1: function(){ },
      func2: function(){ }
}

var otherObjectName = {
      a : 'otherValue',
      func1: function(){ },
      func2: function(){ }
}

你可以通過說減少重復的功能

var objectName = {
      a : 'somevalue',
      func1: function(){ },
      func2: function(){ }
}

var otherObjectName = {
      a : 'otherValue',
      func1: objectName.func1,
      func2: objectName.func2
}

或者,使用的原型,我可以做,所以我可以在我想要的值傳遞a在對象的構造過程。 重構后的代碼如下所示:

var someObject = function(a) {
    this.a = a;
};

someObject.prototype.func1 = function() { /* work */ };
someObject.prototype.func2 = function() { /* work */ };

var myObject = new someObject("somevalue");
var myOtherObject = new someObject("otherValue");

現在,如果我想為它們兩個添加新功能。 使用對象字面量方法,則必須記住還要將其添加到otherObjectName。 隨着文字數量的增加,管理所有這些文字將花費更長的時間和更多的難度。

使用原型方法,我們只需要說:

someObject.prototype.func3 = function() { // do even more work }

甚至更有趣的是,我可以通過只說一個引用來動態擴展兩個對象。

// find what function made me, get its prototype, and add a new function to it
myObject.constructor.prototype.func3 = function() { /* work */ }
myOtherObject.func3() // tada magic!

或者我可以僅通過了解引用來制作新對象。 喜歡:

var newObject = myObject.constructor(myObject.a + " new");

因為myObjectmyOtherObject共享相同的constructorprototype ,所以使用該關系可以執行很多有趣的事情,而對於對象常量則無法做到。

您可以將原型想像成創建對象的小工廠,而不必自己像文字一樣創建每個對象。

現在,如果您在想,“好吧,我只會使用其中之一,而不會使用任何瘋狂的方法來擴展魔術。” 然后,定義對象文字是解決某些問題的完全有效的方法。 有時使用原型會更好。 使用對您要解決的問題有意義的模式,而不是嘗試使問題適合模式。

暫無
暫無

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

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