我对Javascript处理构造函数,方法和原型的方式很新。
我想创建两个具有许多不同自定义方法的构造函数,但也有一些共同的方法。目前我这样做:
function PlayerWhite(n,s) { this.name = n; this.state = s;}
function PlayerBlack(n,c) { this.name = n; this.county = c; }
PlayerWhite.prototype.showCounty = function() { alert(this.county);}
PlayerBlack.prototype.showState = function() { alert(this.state);}
PlayerWhite.prototype.showName = function() { alert(this.name); }
PlayerBlack.prototype.showName = function() { alert(this.name); }
因此“showName”方法的内容对于两个构造函数都是相同的。 “showName”的代码可能会发生变化,两者都是相同的,所以每次我对showName方法进行更新时,我都不想进行双重编辑。
当然,我只能使用1个构造函数(函数Player),调用它两次来构建两个对象中的每一个,然后将公共方法分配给每个对象,然后使用原型将不同的方法应用于每个对象,但是如果我已经编写了数百行代码,并且我有许多从PlayerBlack和PlayerWhite构造函数创建的对象,我只想添加一个可以在通过PlayerBlack或PlayerWhite创建的所有现有对象之间使用的新方法?
我试过这样的事,但它不起作用:
PlayerWhite.prototype.showName,
PlayerBlack.prototype.showName = function() { alert(this.name); }
我正在寻找一种适用于nodeJS的解决方案。
答案 0 :(得分:2)
要共享方法,请按以下方式分配:
PlayerWhite.prototype.showName = function() { alert(this.name); }
PlayerBlack.prototype.showName = PlayerWhite.prototype.showName;
创建共享父级:
Shared = function() { }
//here define shared methods
Shared.prototype.showName = function() { alert(this.name); }
PlayerWhite.prototype = new Shared();
PlayerBlack.prototype = new Shared();
//here define non-shared methods
PlayerWhite.prototype.showCounty = function() { alert(this.county);}
PlayerBlack.prototype.showState = function() { alert(this.state);}
答案 1 :(得分:0)
您正在寻找简单的继承方法。请查看MDN以获得进一步的解释 - 这里有很好的解释。
https://developer.mozilla.org/pl/docs/Web/JavaScript/Inheritance_and_the_prototype_chain
另外 - 如果您期待使用nodeJs,请查看它的“模块”。
https://nodejs.org/api/modules.html
你可以将这两种方法结合起来:
var BaseModel = require('PATHTOBASEMODEL/base_model');
ExtendedModel = Object.create(BaseModel);
ExtendedModel.prototype.yourFunction = function () { /* ... */ };
module.exports = ExtendedModel;