本文主要和大家詳解七種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");
以上是七種JS物件導向之創建物件的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!