對於物件的創建,除了使用字面量和new操作符,在ECMAScript 5標準中,還可以使用Object.create()來進行。 Object.create()函數接受2個物件作為參數:第一個物件是必要的,表示所建立物件的prototype;第二個物件是可選的,用於定義所建立物件的各個屬性(例如,writable 、enumerable)。
var o = Object.create({x:1, y:7});
console.log(o);//Object {x=1, y=7}
console.log(o.__proto__);//Object {x=1, y=7}
將null作為第一個參數調用Object.create()將產生一個沒有prototype的對象,該對象將不會具有任何基本的Object屬性(比如,由於沒有toString()方法,對這個對象使用操作符會拋出異常):
var o2 = Object.create(null);
console.log("It is " o2);//Type Error, can't convert o2 to primitive type
對於僅支援ECMAScript 3標準的瀏覽器,可以用Douglas Crockford的方法來進行Object.create()操作:
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
newObject = Object.create(oldObject);