對於對象的創建,除了使用字面量和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);