【问题标题】:Why nodejs cannot inherit as in browser js为什么nodejs不能像浏览器js那样继承
【发布时间】:2015-11-04 11:11:45
【问题描述】:

我有两个构造函数,子一个从父一个继承了一些方法和属性,就像这样

function foo(){
this.bar="baz";
}

function fubar(){
this.qux="zubar";
}
fubar.prototype=new foo();
fubar.prototype.constructor=fubar;
module.exports.fubar=fubar;

文件继承内部工作正常,但导出时无法访问父元素 我试过util.inherits,结果是一样的

【问题讨论】:

  • 节点符合规范,所以它应该可以工作。你忘了在fubar里面做foo.call(this)吗?
  • 这是为什么呢? @elclanrs
  • 这就是你继承自己的属性的方式,通过使用另一个上下文调用构造函数。
  • 无论如何它都没有用,但是当我在导出之前构造对象时一切正常,但在这种情况下,使用构造函数有什么意义
  • 一般来说使用构造函数和继承的理由不多,但是我看不出导出构造函数怎么行,还有其他的不对……

标签: javascript node.js oop inheritance new-operator


【解决方案1】:

您只需从fubar 构造函数中调用foo 构造函数,以便.bar 属性将在foo 构造函数中正确初始化:

function foo(){
    this.bar = "baz";
}

function fubar(){
    foo.call(this);
    this.qux = "zubar";
}
fubar.prototype = Object.create(foo.prototype);
fubar.prototype.constructor = fubar;
module.exports.fubar = fubar;

最好将Object.create() 用于原型,尽管你所拥有的会奏效。

【讨论】:

  • @nikoss - 这对您有用并回答了您的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2016-06-26
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
相关资源
最近更新 更多