/** * 順便重溫一下物件的建立方式
* **簡單說明問題就好
* 概念性的東西這裡就不提了,只加上自己簡單理解 */
/*** 工廠模式,就是將手動的建立細節封裝在乙個方法裡,
* return出來乙個例項。
* 所謂工廠就是封裝建立工程,得到例項。
* 缺點:不能判斷物件型別,因為得到的型別都是object,
* 不能知道是否createperson的例項
* 是否某物件的例項的判斷其實就是例項的原型是否指向物件
* */
function
createperson(name);
returnp;}
var p1 = createperson('p1');/**
* 建構函式模式:與工廠的不同是不用顯式的去new乙個物件
* 因為不管什麼函式,只要使用new來呼叫都起到建構函式的作用。
* 例項可以通過 instanceof person 來獲得物件型別.
* 缺點:每個方法都要在例項上建立一遍
* */
function
person(name)
}var p2 = new person('p2');
console.log(p2
instanceof person);//
true/**
* 原型模式
* 簡單粗暴原型鏈。
* 對應上述的,原型的方法,各個例項共享相應的屬性或方法
* 缺點就是屬性修改既影響其他
* */
function
cat()
cat.prototype.name = 'catname';
cat.prototype.age = 'catage';
cat.prototype.say = function
();var c1 = new
cat();
console.log(c1
instanceof cat);//
true/**
* 組合建構函式和原型模式
* 為了解決上面的問題混合使用兩種方式
* 該私有的私有,該共享的共享
* */
function
cat1(name)
cat1.prototype.say = function
();var c2 = new cat1('c2');
console.log(c2
instanceof cat1);//
true/**
* 動態原型模式
* 判斷屬性是否存在,來決定式否增加原型屬性
* 和混合模式類似
* */
function
cat2(name)
}}var c3 = new cat2('c2');
console.log(c3
instanceof cat2);//
true/**
* 寄生蟲建構函式模式:
* 函式封裝建立物件的**,返回建立的物件。
* 這裡於工廠模式的區別在於要通過new 來例項化。本質上是一樣的。
* 不可以判斷物件型別:
* */
function
dog(name);
returnd;}
var d = new dog('d');
console.log(d
instanceof dog);//
false/**
* 穩妥建構函式模式:安全
* 沒有公共屬性,方法不引用this。不使用new來例項化物件
* */
function
dog1(name);
returnd;}
var d2 = dog1('a');
console.log(d2
instanceof dog1);//
false
js 建立物件的幾種方式
一 原始方式 解釋 原始方法建立物件,通過new關鍵字生成乙個物件,然後根據js是動態語言的特性新增屬性和方法,構造乙個物件。其中this是表示呼叫該方法的物件。缺點 多次建立物件,則需要重複 多次,不利於 的復用。二 工廠模式 var getage function var getname fun...
js 建立物件的幾種方式
第一種 工廠模式 例1 function createobj name,age return o var per1 createobj 張三 20 per1.sayinfo 缺點 無法知道物件的型別 第二種 建構函式模式 例2 function person name,age var per2 ne...
js建立物件的幾種方式
雖然object建構函式或物件字面量都可以建立單個物件,但這些方式有個明顯的缺點,那就是使用同乙個介面創造很多物件,會產生大量的重複 所以產生了下面幾種模式。1 工廠模式 function createperson name,age,job o.name name o.age age o.job j...