向原型添加方法

时间:2018-07-03 08:29:08

标签: javascript oop

我有以下代码

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)...如果可能的话

1 个答案:

答案 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)