修改使用Object.create()创建的对象的原型

时间:2013-05-16 11:10:23

标签: javascript

var base = function() { };
base.prototype.doStuff = function() { 
    console.log(1); 
};

var foo = Object.create(new base());
console.log(typeof foo); //object
foo.doStuff(); //1

http://jsfiddle.net/xmYQn/

我知道有一些类似的问题,但我找不到这个问题的答案。

这有效,但如果我希望foofunction类型,以便我可以为其原型添加属性,该怎么办?换句话说,让它继承base原型中的方法并将它们与自己的原型合并?

2 个答案:

答案 0 :(得分:2)

Object.create(new base());

创建一个新的普通对象,它继承自base实例(继承自base.prototype等)。你几乎不需要这样的东西。

  

我希望foo属于类型函数

然后将其定义为函数:

function foo() {}
  

...以便我可以为其原型添加属性?

现在你可以做到。

  

让它继承基础原型中的方法并将它们与自己的原型合并?

没有多少“合并”。但是你可以创建一个继承自base.prototype的新对象,将其设置为foo的原型,然后在那里添加你的属性:

foo.prototype = Object.create(base.prototype); // of course, anything that was
                                               // previously set on foo.prototype
                                               // is now lost
foo.prototype.constructor = foo;
foo.prototype.doOtherStuff = function(){…};
…

然后做

var fooInstance = new foo;
fooInstance.doStuff(); // 1
fooInstance.doOtherStuff();

答案 1 :(得分:1)

由于我读了这篇非常好的帖子系列(http://davidwalsh.name/javascript-objects-deconstruction),我会选择以下内容:

var Base = { 
    doStuff : function() { 
        console.log(1); 
    }
};

var foo = Object.create(Base);
foo.doStuff = function() { 
      console.log(2); 
    };

var foo2 = Object.create(foo);

console.log(typeof foo); //object
foo.doStuff(); //2
foo2.doStuff(); //2