本文介绍ECMAScript 5中Object.create()函数的用法,包括指定原型和属性定义。通过示例展示如何创建带原型对象及无原型对象(null)。针对不支持ES5的浏览器,提供了基于Douglas Crockford方法的兼容实现代码,确保旧环境下的对象创建功能。
Object.create()基本用法与原型链
在JavaScript中,除了使用字面量语法和new操作符外,ECMAScript 5标准引入了Object.create()方法来创建对象。该方法接收两个参数:第一个参数是必需的,用于指定新对象的原型;第二个参数是可选的,用于定义新对象的属性,例如设置属性的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(),则会创建一个没有原型的对象。由于该对象没有继承任何Object的基本属性(例如toString()方法),尝试对该对象使用+操作符进行类型转换时会抛出异常。
代码如下:
var o2 = Object.create(null);
console.log("It is " + o2);//Type Error, can't convert o2 to primitive type
ES3环境下的兼容实现
对于仅支持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);