理想情况下,我想做以下这样的事情:
我的主要动机是,通过将棋类和方块类分别定义,可以实现以下类似的功能:(此处指的是棋类)
可以缩短为
哪个更易读且更简洁。
不幸的是,我不能随便制作。
由于结果取决于Chess类中的信息,因此这是一种方法。
似乎比类似的东西要好得多。
你有关于如何完成上述任务的建议吗?是否有一种方法可以在一个类内部编写另一个类,或者完全使用其他方法?
编辑:
根据likle和alex的建议,我做了以下操作:
我向Square类添加了一个context属性。
然后将一些来自Chess.prototype的方法重新定义到了Square.protoype中。例如:
这意味着每次我创建一个Square对象时都需要添加上下文。例如:
为了让代码更易读,我创建了以下方法:
一个Square对象有时可以通过以下方式创建:
class Chess = {
constructor() {
this.board = ...;
...
};
class Square = {
constructor(row, col) {
this.row = row;
this.col = col;
};
};
我的主要动机是,通过将棋类和方块类分别定义,可以实现以下类似的功能:(此处指的是棋类)
this.empty(square)
可以缩短为
square.empty()
哪个更易读且更简洁。
不幸的是,我不能随便制作。
Square.empty()
由于结果取决于Chess类中的信息,因此这是一种方法。
square.empty(chess)
没有真正的改进。
我有一个正方形类的原因是类似于
square.up()
似乎比类似的东西要好得多。
[row, col + 1]
你有关于如何完成上述任务的建议吗?是否有一种方法可以在一个类内部编写另一个类,或者完全使用其他方法?
编辑:
根据likle和alex的建议,我做了以下操作:
我向Square类添加了一个context属性。
class Square = {
constructor(context, row, col) {
this.context = context;
this.row = row;
this.col = col;
};
};
然后将一些来自Chess.prototype的方法重新定义到了Square.protoype中。例如:
// before
Chess.prototype.empty = function (square) {
return this.piece(square) === 0;
};
// after
Square.prototype.empty = function () {
return this.piece() === 0;
};
这意味着每次我创建一个Square对象时都需要添加上下文。例如:
new Square(3, 4); // before
new Square(this, 3, 4); // after
new Square(this.context, 3, 4); // sometimes like this
为了让代码更易读,我创建了以下方法:
Chess.prototype.createSquare = function (row, col) {
return new Square(this, row, col);
};
一个Square对象有时可以通过以下方式创建:
this.createSquare(3, 4);
Chess
只是实例化Square
的实例。 - alex