【发布时间】:2014-12-17 21:53:35
【问题描述】:
我正在尝试开始使用 Javascript (thanks to this guide) 中的类。我已经学会了如何创建类的实例,以及如何嵌套它们,但我不知道如何让子类与其父类进行通信。
这是我的基本示例:我有一个 Board 类,它有一个数组 allPieces,其中包含 20 个 Piece 子对象。
function Board(){
this.allPieces = [];
this.selectedPiece = null;
for(var i = 0; i < 20; i++){
this.allPieces.push(new Piece(i));
}
}
Board.prototype.makeSelection = function(currentPiece){
this.selectedPiece = currentPiece;
}
function Piece(index){
this.type = index;
this.jqObject = $(".piece").eq(this.type);
this.jqObject.click(function(){
this.pieceClicked();
}.bind(this));
}
Piece.prototype.pieceClicked = function(){
Board.makeSelection(this); // <------ This gives me an error!
// How do I tell Board that a selection has been made?
}
new Board();
我可以通过调用this.allPieces[0].anyMethod() 从 Board 与 Piece 进行通信,但是,一旦单击它,我不知道如何从 Piece 与其父 Board 进行通信;我收到错误“Board.makeSelection 不是函数”。我如何告诉董事会一件作品已被选中?
我尝试为 Board var game = new Board(); 分配一个 var 名称,然后调用 game.makeSelection(this);,但问题是这一次只允许一个 Board 实例。我需要有多个实例。有什么建议吗?
【问题讨论】:
-
Board.makeSelection不存在,但Board.prototype.makeSelection存在 -
“问题是这一次只允许一个 Board 实例。”大概这是一个游戏,一次应该只有一个棋盘实例?
-
@GeorgeJempty 不,会有不止一个董事会。我试图让每个 Piece 与其直接父 Board 通信,而不是与任何通用 Board 通信。但我确实在下面找到了一个很好的答案!
标签: javascript class oop inheritance