var base = function() { };
base.prototype.doStuff = function() {
console.log(1);
};
var foo = Object.create(new base());
console.log(typeof foo); //object
foo.doStuff(); //1
我知道有一些类似的问题,但我找不到这个问题的答案。
这有效,但如果我希望foo
为function
类型,以便我可以为其原型添加属性,该怎么办?换句话说,让它继承base
原型中的方法并将它们与自己的原型合并?
答案 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