代码之家  ›  专栏  ›  技术社区  ›  plodder

javascript:在不使用new+构造函数的情况下基于原型创建对象

  •  10
  • plodder  · 技术社区  · 14 年前

    这有可能吗?

    我的想法是:原型本质上是构造器函数的属性(无论是本机构造器,如函数、字符串或对象,还是您自己的自定义构造器),只有“new”关键字能够利用构造器及其原型来创建对象。

    我错过什么了吗?

    1 回复  |  直到 14 年前
        1
  •  12
  •   Christian C. Salvadó    14 年前

    你是对的,但现在在ECMAScript第五版中, Object.create 方法可以使用其他对象作为原型创建对象实例:

    var proto = {foo: 1};
    var obj = Object.create(proto);
    

    在上面的例子中, obj 将被创建并包含对 proto [[Prototype]] 内部属性,以及:

    obj.foo; // 1
    obj.hasOwnProperty('foo'); // false
    

    这个方法来自于2009年12月批准的新规范,据我所见,现在可以在 Mozilla JavaScript 1.9.3 实施。

    现在,您可以通过这个来模拟该方法的行为,正如 Douglas Crockford :

    if (typeof Object.create !== 'function') {
      Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
      };
    }