Javascriptinheritance使用节点
我想在我的子类中使用父类的方法。
在传统的面向对象中,只需要扩展你的子类就可以利用你父母的function,这是否可以使用原型?
这是我的文件结构:
Parent.js
var Parent = function(){ this.add = function(num) { return num + 1; }; }; module.exports = Parent;
Child.js
var Parent = require("./parent.js"), util = require("util"); var Child = function() { this.sum = function(num) { // I want to be able to use Parent.add() without instantiating inside the class // like this: console.log(add(num)); }; }; util.inherits(Child, Parent); module.exports = Child;
program.js
var child = require("./child.js"); var Calculator = new child(); Calculator.sum(1);
显然, add()
在这里没有定义。
我试过使用util.inherits,但我不知道这是正确的做法。
我也想问一下,在JavaScript中这是否是一个好的devise模式,考虑到我想从父类inheritance多个子类?
你的代码有两个问题:
首先,如@Pointy的评论所述,Child.js中的add
方法应该由此限定this.
。 这是因为使用add
会将其parsing到根作用域(浏览器中的window
)。
其次,通过使用this.add = function(...){...}
,您可以独立地add
Parent
的add
方法绑定到每个特定实例。 将它绑定到Parent
原型,你会得到你想要的。
var Parent = function() {} Parent.prototype.add = function(num) { return num + 1; }
函数Parent.prototype.add
将被推断为Parent
及其派生对象的所有实例。