多个现有构造函数的JavaScript常用方法

时间:2016-01-14 13:54:15

标签: javascript node.js constructor

我对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的解决方案。

2 个答案:

答案 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;