var person = new object();
person.name = "albert";
person.sayname = function();
var person =
};
建立很多物件的時候會產生大量重複**。
function createperson(name)
return o;
}var person = createperson("albert");
無法識別物件型別,即無法通過instanceof
和constructor
來識別物件型別:
person instanceof ???;
person.constructor == ???;
function person(name)
}var person = new person("albert");
console.log(person.constructor == person)//true
console.log(person instanceof person)//true
每個方法都要在每個例項上重新建立一次,尤其是函式,這樣每個person
的例項都包含了乙個不同的sayname
的函式例項。
注意1
建構函式沒有return
語句。要建立person
的新例項,必須採用new
操作符,new
操作符大體上完成了一下4件事情:
注意2
建構函式也是函式,如果不通過new
操作符呼叫,則作用環境為全域性(瀏覽器中為windows
,node環境中為global
)
function person(name)
}person("bb");
global.sayname()//bb
console.log(global.name)//bb
function person(name){}
person.prototype.name = "albert";
person.prototype.sayname = function()
var person = new person();
console.log(object.getprototypeof(person)==person.prototype);//true
瀏覽器支援:ie9+,這樣所有的person
例項共享name
屬性及sayname
函式
注意1
注意2
在定義原型時,如果用字面量代替為prototype
屬性定義,則原型的constructor
屬性不會指向person
。因為通過字面量定義,完全重寫了預設的prototype
物件。但是此時instanceof
還是能夠返回正確的結果。
function person(name){};
person.prototype=
};var person = new person();
console.log(person instanceof person);//true
console.log(person.constructor == person);//false
console.log(person.constructor == object);//true
所以可以再補充定義:
object.defineproperty(person.prototype,"constructor",)
注意3
在重定義原型前,不能建立物件例項,否則會造成例項的原型指向錯誤
function person(name){};
var person = new person();
person.prototype=
};person.sayname(); //error
此例中person
的原型被指向了person
的預設原型,固呼叫sayname
函式會發生錯誤。
利用建構函式都是例項屬性和原型的共享特性,分別定義對應的內容,組合共同完成物件建立,而且該模式還支援想建構函式傳遞引數。
function person(name);
person.prototype.sayname = function();
將1.6中的組合封裝在乙個建構函式中的模式。具體方法為:檢查某個應該存在的方法是否有效來決定是否需要初始化原型。
function person(name);
}};
建構函式在不反回值的情況下,缺省會返回新物件例項。
而通過在函式末尾新增return
語句,可以重寫new
後呼叫函式時的返回值。
function person(name);
return o;
};var person = new person("albert");
console.log(person instanceof person);//false
該函式除了使用new
操作符和把包裝函式取名叫「建構函式」以外,和工廠模式其實是一模一樣的。
該模式屬於比較特殊的構造模式,可用於不允許修改原物件的情況。
function specialarray();
return values
}
該模式構造出來的物件沒有公共屬性,不適用this
物件,不適用new
操作符,適用於在一些安全環境中,可防止資料被其它應用(如mashup
)改動(利用閉包特性),類似於寄生建構函式模式,單不適用this
和new
。
function person(name);
return o;
};var person = person("albert");
這種模式中,除了sayname()
方法以外,沒有其它辦法訪問_name
的值。 javascript物件的建立
function createoject name,return object var aa createoject zhangsan nan aa.run 利用第一種方式的問題就是不能識別他是什麼物件 function myobject name,var testobect new myobjec...
JavaScript物件的建立
var person new object person.name cjh person.age 19 var person 需要注意的是,花括號內,成員與成員之間以逗號隔開,而最後乙個成員後不能跟逗號,否則會在ie7及更早的版本中報錯。成員名也可以直接使用字串。其一大優點是可以向函式傳遞大量引數。...
JavaScript建立物件
一 建立單個物件 方式一 object建構函式 var o new object o.key value 方式二 物件字面量 方式一和二缺點 使用相同的介面建立很多物件會產生大量重複 使用方式三解決 方式三 工廠模式 使用函式封裝以特定介面建立物件的細節 function createobject ...