gpt4 book ai didi

Javascript:如何在不同类之间进行通信?

转载 作者:行者123 更新时间:2023-11-28 11:34:32 26 4
gpt4 key购买 nike

我正在尝试开始使用 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 name var game = new Board(); 然后调用 game.makeSelection(this); 但问题是这一次只允许有一个 Board 实例。我需要有多个实例。有什么建议吗?

最佳答案

为了实现这一点,您需要在各个片段上建立某种双向数据绑定(bind)。您可以通过执行以下操作来实现此目的。

首先,修改piece类,以便它知道它的父级:

function Piece(index, parent){ // notice the second argument
this.parent = parent; // we're going to store a reference to the parent here
this.type = index;
this.jqObject = $(".piece").eq(this.type);
this.jqObject.click(function(){
this.pieceClicked();
}.bind(this));
}

Piece.prototype.pieceClicked = function(){
this.parent.makeSelection(this); // we'll access the makeSelection method from the parent
}

然后,修改棋盘类,使其将自身作为第二个参数传递到棋子的创建中:

function Board(){
this.allPieces = [];
this.selectedPiece = null;
for(var i = 0; i < 20; i++){
this.allPieces.push(new Piece(i, this));
// we'll invoke the piece with a second argument which will be the parent (the board)
}
}

这将允许每个片段通过访问片段上的 this.parent 属性来了解其父片段。然后,您可以通过访问 this.parent.makeSelection 并将其作为参数传递来访问父级上的 make 选择方法。

关于Javascript:如何在不同类之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27535520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com