用Lo-Dash继承

Dam*_*jan 3 javascript inheritance lodash

我试图使用Lo-Dash javascript库在javascript中模拟继承.

我只是使用_.extend这样做:

function Parent() {
  var self = this;

  self.hello = function () {
    console.log('Hello from parent');
  };
}

function Child() {
  var self = this;

  _.extend(self, Parent);
}

Child.hello(); // Doesn't exist
Run Code Online (Sandbox Code Playgroud)

我认为这可行,因为所有的javascript函数都是对象,但显然我错了.为什么这不起作用,我将如何使用Lo-Dash正确模拟继承?

ree*_*eem 6

Parent只是Parent类的构造函数,它本身不具有hello它添加的属性self.你可以改变这一_.extend行:_.extend(self, new Parent())解决它.这工作,因为对象返回new Parent()确实有一个hello该属性_.extend可以通过复制到self.

要访问该hello属性,您还必须创建该类的实例,Child而不是hello在构造函数上访问.进行上述更改后,(new Child()).hello()应该工作,因为您访问实例hello上的属性而不是构造函数.Child

但是,在我看来,这似乎是一个糟糕的解决方案,因为它new Child() instanceof Parent会回归false.如果你想正确设置原型链以便继续进行"真正的"继承,你应该阅读有关伪造的原型和原型继承.