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/修改创建的对象使用的Object.create()原型
我知道有一些类似的问题在那里,但我无法找到一个答案之一。
这是可行的,但是如果我想foo
的类型为function
,那么我可以添加属性到它的原型呢?换句话说,让它继承base
原型的方法并将它们与它自己的原型合并?
谢谢。你能解释为什么这个'foo.prototype.constructor = foo;'是必要的吗? – Johan
@Johan:这不是必须的,[因为你几乎不需要使用'.constructor'属性](http://stackoverflow.com/q/12622137/1048572)。如果你没有这样做,'fooInstance.constructor'就是'base'(因为它从'base.prototype'继承它)。这可能会让人感到困惑,因此经常将其“纠正”为好习惯。在这个答案中,更多的是展示任意属性的设置:-) – Bergi
@Bergi如果我们添加'base.prototype.anotherFuncInBase = function(){console.log('in base'); };'在基地。我们使用fooInstance'fooInstance .anotherFuncInBase()'调用它。这是怎么发生的? Object.create指向'base.prototype'的引用吗? – rab