簡體   English   中英

我正在嘗試了解以下javascript代碼

[英]I am trying to understand the following javascript code

    var ppElement=function(str_elmt){
      this.tagName=(str_elmt==null)?"div":str_elmt;
    }
    ppElement.prototype={
      constructor:ppElement,
      ppCreate:function(){
        return document.createElement(this.tagName);
      },
      ppAppend:function(){
        var prntObj=arguments[0];
        for(var i=1;i<arguments.length;i++){
          prntObj.appendChild(arguments[i]);
        }
      }
    };
    /*=====================================*/
    var ppLabel=function(str_txt){
      this.text=str_txt;
    }
    ppLabel.prototype=Object.create(ppElement.prototype,{
      constructor:ppLabel,
      ppCreateLabel:{
        value:function(){
          var obj,txtObj;
          ppElement.call(this);
          obj=this.ppCreate();
          txtObj=document.createTextNode(this.text);
          this.ppAppend(obj,txtObj);
          return obj;
        }
      }
    });
    /*=====================================*/
    var tempObj=new ppLabel("Jeff");
    tempObj.ppCreateLabel();
    /*=====================================*/

這段代碼是我寫的。 我試圖使用object.create從ppLabel繼承ppElement的方法。 我對object.create有點困惑。 我不明白object.create中正在發生什么。 上面的代碼對我有用,但是我想理解。

幾個問題:

  • 此實現在所有瀏覽器中都適用嗎?

  • 如何從單個派生類的2個基類繼承? 如果可能的話,有人告訴我如何以原型構造器模式實現它們(我在網上找到了它們,並且我已經以該模式編寫了上面的代碼)。

  • 這種編寫代碼會影響性能嗎? (我之所以選擇此模式,是因為據說JavaScript是原型語言。因此,我決定將代碼編寫在原型構造函數模式下)

  • 我們可以使用__proto__嗎? 我在互聯網上發現__proto__的使用已被棄用。

如果我的代碼有任何錯誤,請隨時聲明,這對我真的很有幫助。

謝謝!!

上面的代碼對我有用,但是我想理解。

關於原型繼承,這里和網上有很多很多問題,例如MDN:繼承和原型鏈

此實現在所有瀏覽器中都適用嗎?

所有支持Object.create的內容(在EMCA-262第5版中引入)都將是最多的。 也許您不關心那些不關心的內容(例如IE 8及更低版本)。 實現polyfill非常容易。

如何從單個派生類的2個基類繼承?

ECMAScript中沒有類。 有構造函數和原型(還有類語法,但它不會像這樣創建類)。

無論如何,我認為您已經做到了。 有多種解決方法,但最終結果幾乎就是您所做的。 也就是說,將所需的原型對象堆疊在Constructor.prototype[[Prototype]]之上,以便它們全部位於實例的原型鏈上。

如果可能的話,有人告訴我如何以原型構造器模式實現它們(我在網上找到了它們,並且我已經以該模式編寫了上面的代碼)。

我想你已經做到了。

這種編寫代碼會影響性能嗎? (我之所以選擇此模式,是因為據說JavaScript是原型語言。因此,我決定將代碼編寫在原型構造函數模式下)

相較於性能表現呢? 沒有構造函數的純函數? 不太可能。 這更多地取決於語義以及您喜歡如何閱讀和理解代碼。

我們可以使用原型嗎? 我在互聯網上發現不贊成使用Proto

可以,但不建議這樣做。 它已添加到ECMA-262的附錄中。 如果您需要直接訪問對象的[[Prototype]] ,則可能有更好的方法來執行您要嘗試執行的操作。 但是當然也有例外。

暫無
暫無

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

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