Object.create 方法

Object.create 方法
0

JavaScript 中,Object.create 方法用于创建一个以指定对象为原型(prototype)的新对象。

那么 Object.create 到底做了些什么事情呢?Object.create 的“底层实现”是怎样的呢?根据 ECMAScript 规范中对 new 运算符的定义以及 MDN 中对 Object.create 的描述,语句 var a = Object.create(proto) 相当于如下 JavaScript 代码:

var a;
(function () {
    // 1. 创建一个空的构造函数
    function Temp() {}
    // 2. 将该构造函数的 prototype 属性设为指定对象
    Temp.prototype = proto;
    // 3. 返回以该构造函数实例化的一个对象
    a = new Temp();
    // 4. 这时 a 的原型([[prototype]] 内部属性)就是 proto 对象了
})();

在 JavaScript 中,“类”的继承关系就是靠设置构造函数(constructor)的 prototype 属性的原型([[prototype]] 内部属性)来实现的。在 ECMAScript 5.1 之前,没有 Object.create 方法,更没有 Object.setPrototype 方法,new 运算符是指定一个对象的原型的唯一方式。

但是用 new 运算符并不能直接设置一个对象的原型,需要额外写一个构造函数并设置构造函数的 prototype 属性才行。Object.create 方法则简化了这一过程。