建構式+原型模式
? 創建自定義型別的最常見方式,就是組合使用建構式模式與原型模式,建構式模式用于定義實體屬性,而原型模式用于定義方法和共享的屬性,結果,每個實體都會有自己的一份實體屬性的副本,但同使又共享這對方法的參考,最大限度地節省了記憶體,另外,這種混合模式還支持向建構式傳遞引數;可謂是集兩種模式之長,下面的代碼重寫了前面的例子:
function Person(name, age, sex){
this.name = name
this.age = age
this.sex = sex
this.friends = ['小紅', '小美']
}
Person.prototype = {
constructor: Person,
sleep: function() { alert(this.name + '睡覺了') }
}
var person1 = new Person()
var person2 = new Person()
person1.friends.push('小敏')
console.log(person1.friends) // ["小紅", "小美", "小敏"]
console.log(person2.friends) // ["小紅", "小美"]
console.log(person1.friends === person2.friends) // false
console.log(person1.sleep === person2.sleep) // true
? 在這個例子中,實體屬性都是在建構式中定義的,而由所有實體共享的屬性 constructor 和方法 sleep() 則是在原型中定義的,而修改了 person1.friends (向其中添加一個新字串),并不會影響到 person2.friends,因為它們分別參考了不同的陣列,
? 這種建構式與原型混成的模式,是目前 ES5 中使用最廣泛、認同度最高的一種創建定義型別的方法,可以說,這是用來定義參考型別的一種默認模式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/253894.html
標籤:JavaScript
上一篇:原型模式
下一篇:動態原型模式
