我有以下代码
const humanUtils = {
sayRace: function(){
console.log('Im a '+ this.race);
}
}
function human() {
const human = Object.create(humanUtils);
human.race = 'human';
return human;
}
const manUtils = Object.create(humanUtils);
function man() {
const createMan = new human();
createMan.gender = 'man';
return createMan
}
function woman() {
const createWoman = new human();
createWoman.gender = 'woman';
return createWoman;
}
const mankind = new human();
const adam = new man();
const eve = new woman();
我想向manUtils()添加一个方法,该方法仅适用于男人,而不适用于男人和女人,例如我可以调用man.foo()。
如何使构造函数man()指向manUtils并仍然访问humanUtils函数,以便我可以调用从manUtils继承的adam.sayRace()
和adam.foo()
?
我既不想使用新的es6类,也不想使用传统的原型重新分配(mdn)...如果可能的话
答案 0 :(得分:1)
是否有理由不将race
属性放入humanUtils
?如果没有,就把竞赛放在那里,就可以使构造函数man()
指向manUtils
并仍然通过编写来访问humanUtils的函数
function man() {
return Object.create(manUtils)
}
然后,如果要向manUtils
添加方法,只需编写manUtils.fancyNewMethod = yourNewMethod
new
在您的示例中,使用new
运算符来构造人类,亚当和夏娃是没有意义的。编写new human
时,将创建一个新对象(将其称为A
作为参考),并将其作为原型human.prototype
(这是一个空对象,因为您不想重新分配{ {1}}到humanUtils
),然后执行human.prototype
,将human
绑定到this
。但是在A
构造函数中,您丢弃了human
,而是使用A
创建了自己的对象。
Object.create(humanUtils)