首頁 >web前端 >js教程 >七種JS物件導向之創建物件的方法

七種JS物件導向之創建物件的方法

零到壹度
零到壹度原創
2018-03-22 16:31:061323瀏覽

本文主要和大家詳解七種JS物件導向之創建對象,主要以程式碼的形式和大家分享,希望能幫助大家。

一、工廠模式
考慮到ECMAScript中無法創建類,開發人員發明了一種函數,用函數來封裝以特定介面創建物件的細節:

function createPerson(name,age,job){
    var o = new Object();  
      o.name = name;  
      o.age = age;
      o.job = job;  
      o.sayName = function(){  
            alert(this.name);
    }; 
    return o;
}
var person1 = createPerson("Joy",29,"Software Engineer");
var person2 = createPerson("Greg",27,"Doctor");

二、建構函式模式

function Person(name,age,job){  
  this.name = name;  
   this.age = age;  
     this.job = job; 
        this.sayName = function(){   
             alert(this.name);
    }
}
var person1 = new Person("Joy",29,"Software Engineer");
var person2 = new Person("Greg",27,"Doctor");
alert(person1.sayName === person2.sayName); //false.每个Person实例都会创建一个功能相同的Function实例

三、原型模式
每建立一個函數都有一個prototype屬性,這個屬性是一個指針,指向一個對象,而這個對象的用途是包含可以有特定類型共享的屬性和方法。使用原型物件的好處是可以讓所有物件執行個體共享他所包含的屬性和方法

function Person(){}
    Person.prototype.name = "Joy";
    Person.prototype.age = 29;
    Person.prototype.job = "Software Engineer";
    Person.prototype..sayName = function(){ 
  alert(this.name)
};
  var person1 = new Person();

  
  四、使用建構函式模式和原型模式
 

 function Person(name,age,job){  
    this.name = name;   
     this.age = age;    
     this.job = job;
}
   Person.prototype = { 
      sayName:function(){     
         alert(this.name)
    }
};
   var person1 = new Person("Joy",29,"Software Engineer");
   var person2 = new Person("Greg",27,"Doctor");
   alert(person1.sayName === person2.sayName); //true

   
   五、動態原型模式
  

 function Person(name,age,job){   
    this.name = name;    
    this.age = age;    
    this.job = job;    
    if(typeof this.sayName != 'function'){  
          console.log(this.name); //在下了person1、person2两个实例下只会输出Joy,不会输出Greg   
          Person.prototype.sayName = function(){ //这里只在sayName()方法不存在的情况下,才会将它添加到原型中。这段代码只会在初次调用构造函数是才会执行。            alert(this.name)
        }
    }
}
  var person1 = new Person("Joy",29,"Software Engineer");var person2 = new Person("Greg",27,"Doctor");

 
   
   六、以寄生蟲模式

函數或與建構函數的原型屬性之間沒有關係,也就是說,建構函數所傳回的物件與在建構函數外部創建的物件沒有什麼不同。為此建議能使用其他模式的情況下不要使用這種模式


七、穩妥建構函數模式
所謂穩妥指的是沒有公共屬性,而且其方法也不引用this物件。穩妥建構函數遵循與寄生建構函式類似的模式,但有兩點不同:一是新建立的物件實例方法不引用this;而是不使用new操作符呼叫建構函式。

   function Person(name,age,job){   
    var o = new Object();    
    o.name = name;    
    o.age = age;    
    o.job = job;    
    o.sayName = function(){        
        alert(this.name);
    };
        return o;
}
var person1 = new Person("Joy",27,"Software Engineer");

這樣,變數person1中保存的是一個穩健的對象,而除了sayName()方法外,沒有別的方式可以存取其資料成員。即使有其他程式碼會為這個對啊ing加入方法或資料成員,但也不可能有別的辦法存取傳入到建構函式中的原始資料。

以上是七種JS物件導向之創建物件的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn