【发布时间】:2015-02-12 07:40:23
【问题描述】:
我一直在弄清楚如何在使用 Object.create() 而不是传统的构造函数时进行多级继承。我打开了一个小提琴 here 。
我们有两种类型的对象,程序员和“子类”前端开发人员。程序员继承自程序员原型对象,正如您所见,所有程序员都可能很尴尬。
var programmerProto = Object.create(Object.prototype,{
beAwkward: {value: function(){
return "Yeah I uhh, AHEM, *shuffles feet*";
}
}
});
function programmerFactory (name, age, neckbeard){
return Object.create(programmerProto, {
name: {writable: true, enumerable: true, value: name},
age: {writable: false, enumerable: true, value: age},
neckbeard: {writable: true, enumerable: true, value: neckbeard}
});
}
现在对于前端开发人员来说,他们有自己的共同特征,所以我们需要一个新的原型对象。但是,前端开发者也是程序员,所以我们制作前端原型对象如下:
var frontEndProto = Object.create(programmerProto, {
beSmooth: {
value: function(){
return "Excuse me ma'am, could I interest you in a, fish sandwich?";
}
},
preferredLanguage: {writable: true, enumerable: true, value: 'JS'}
});
现在我们遇到了问题。我想使用工厂方法来创建前端开发人员的实例,所以我可以添加一些前端特定的属性,比如“CSS3_skillz”之类的。但是如果我使用 Object.create(frontEndProto, "..."),那 ... 将是我已经在programmerFactoryFunction 中编写的所有代码。如果我从frontEndFactory 中调用programmerFactory,则返回对象的原型是programmerProto 而不是frontEndProto。处理这个问题的正确方法是什么?
【问题讨论】:
标签: javascript inheritance prototype factory