一、字面量方式
var obj = {
name: 'mm',
age: 18,
sayName: function() {
console.log(this.name);
}
}
問題:創建多個物件時會造成代碼冗余,很占記憶體空間,
二、工廠模式
//function createToy(name) {
// var o = new Object();
// o.name = name;
// o.say = function() {
// console.log(this.name);
// }
// return o;
//}
function createToy(name) {
return {
name: name,
say: function() {
console.log(this.name);
}
}
}
var toy1 = createToy('car');
toy1.say();
var toy2 = createToy('taxi');
toy2.say();
var toy3 = createToy('bus');
toy3.say();
console.log(toy1 instanceof Object);
console.log(toy2 instanceof Object);
console.log(toy3 instanceof Object);
問題:雖然解決了物件字面量創造物件冗余的問題,但是存在物件識別的問題,不能反映它們之間的內在關系,
三、建構式模式
function Toy(name) {
this.name = name;
this.say = function() {
console.log(this.name);
}
}
var toy1 = new Toy('car');
var toy2 = new Toy('car');
console.log(toy1.constructor);
console.log(toy2.constructor);
console.log(toy1.say === toy2.say); // false
問題:解決了工廠模式的問題,但是相同方法重復創建就浪費了記憶體空間,
四、原型模式
function Person() {};
Person.prototype = {
constructor: Person,
name: 'mm',
friends: ['mike','helen'],
say: function() {
console.log(this.name);
}
}
var toy1 = new Person('train');
var toy2 = new Person('bus');
toy1.friends.push('suhai');
console.log(toy1.friends);
console.log(toy2.friends);
問題:共享方法,解決了建構式的問題,但是當前實體的參考型別的屬性被所有實體共享,一個變所有變,
五、組合模式(建構式+原型模式)
function Person(name) {
this.name = name;
this.friends = ['mike','helen'];
};
Person.prototype = {
constructor: Person,
say: function() {
console.log(this.name);
}
}
var toy1 = new Person('train');
var toy2 = new Person('bus');
toy1.friends.push('suhai');
console.log(toy1.friends);
console.log(toy2.friends);
這是常用的創建方式,
通過建構式模式定義實體屬性,通過原型模式定義方法和共享的屬性,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/109898.html
標籤:JavaScript
下一篇:js判斷資料型別
