簡體   English   中英

使用原型JavaScript - 最佳實踐

[英]Using prototype JavaScript - best practice

目前我正在開發一個我們正在編寫面向對象的JavaScript的項目。 在這個項目中,我看到了兩種不同的定義類的方法:

1:在原型上一次聲明函數

My.Namespace.ClassName = function(param1, param2) {
   this.member1 = param1;
   this.member2 = param2;
};

My.Namespace.ClassName.prototype = {
   myFunction1: function() {
      return this.member1 + " " + this.member2;
   },

   myFunction2: function(param1) {
      this.member3 = paraml;
   }
};

2:准備原型上的每個功能

My.Namespace.ClassName = function(param1, param2) {
   this.member1 = param1;
   this.member2 = param2;
};

My.Namespace.ClassName.prototype.myFunction1 = function() {
   return this.member1 + " " + this.member2;
};

My.Namespace.ClassName.prototype.myFunction2 = function(param1) {
   this.member3 = paraml;
};

基於兩個給定的示例,JavaScript的行為方式有什么不同,還是僅僅是樣式差異?

就個人而言,我沒有看到任何行為差異,但我覺得必須有一個微妙的差異,我目前缺少。

除此之外。 我想知道這是一種常見的做法,還是有更好的方法來定義類。

有一個微妙的區別。 在第一種方法中,當你覆蓋原型時,那里有一個現在丟失的屬性。 這是constructor ,它指向您的函數。 構造函數允許您重新創建它的對象類型。

您可以輕松地將其取回,因此可以通過手動設置它來使用第一種方法:

My.Namespace.ClassName.prototype = {
   myFunction1: function() {
      return this.member1 + " " + this.member2;
   },

   myFunction2: function(param1) {
      this.member3 = paraml;
   },
   constructor: My.Namespace.ClassName
};

另見: https//developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor

暫無
暫無

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

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