用Lo-Dash继承

时间:2014-08-05 23:03:23

标签: 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

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

3 个答案:

答案 0 :(得分:13)

See _.create documentation是一个有效的例子。

答案 1 :(得分:6)

Parent只是Parent类的构造函数,它本身不具有它添加到hello的{​​{1}}属性。您只需将self行更改为:_.extend即可解决此问题。这是有效的,因为_.extend(self, new Parent())返回的对象确实具有new Parent()属性hello可以复制到_.extend

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

但是,在我看来这是一个糟糕的解决方案,因为Child将返回new Child() instanceof Parent。如果你想正确设置原型链,那就是&#34; true&#34;继承你应该阅读有关伪科学和原型继承的文章。

答案 2 :(得分:4)

您可以使用_.create()函数和prototype来模拟继承。

function Parent() {}

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

function Child() {}

Child.prototype = _.create(Parent.prototype, {
    'constructor': Child
});

var child = new Child();
child.hello(); //Hello from parent