基本描述

语法

Object.create(proto, [ propertiesObject ])

参数

  • proto 创建新对象的原型
  • propertiesObject 可选,该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符

返回值

一个新的对象,其内部属性[[prototype]]指向proto

polyfill

差不多10年前,有人提出了一种创建对象实现继承的新方式:

function create(o){
    function temp(){};
    temp.prototype = o;
    return new temp();
}

后来这个终于被标准化了,就有了我们的Object.create

这个方法最主要的用途就是实现继承。稍微偏门但是实用的用途是创建一个真·空对象,Object.create(null),熟悉原型链的你应该可以看出来,这样创建的新对象的[[prototype]]指向的是null,新对象没法访问到Object.prototype的方法。

if (typeof Object.create != 'function') {
  Object.create = (function() {
    function Temp() {}

    var hasOwn = Object.prototype.hasOwnProperty;

    return function (O) {
      if (typeof O != 'object') {
        throw TypeError('Object prototype may only be an Object or null');
      }
      Temp.prototype = O;
      var obj = new Temp();
      Temp.prototype = null; 

      if (arguments.length > 1) {
        var Properties = Object(arguments[1]);
        for (var prop in Properties) {
          if (hasOwn.call(Properties, prop)) {
            obj[prop] = Properties[prop];
          }
        }
      }
      return obj;
    };
  })();
}

results matching ""

    No results matching ""