nesne eklemek gerekir Şimdi javascript bir satranç oyunu yapıyorum ve miras ile çalışmak için doğru yolu biraz emin değilim. Bir kod kısmında farklı parça türleri bir şövalye ile örneğin, o uzanan bir parça nesne var onu (yorumsuz) şöyle (Bu en kısa var gibi):javascript, ben nesnelere veya nesne prototip
adet
/************* piece ********************/
function Piece(square, color) {
this.square = square;
this.color = color;
}
Piece.prototype.get_path = function(to) {
return null;
};
Piece.prototype.get_capture_path = function(to) {
return this.get_path(to);
};
Piece.prototype.isAt= function(square) {
return (this.square.equals(square));
};
/************* KNIGHT *****************/
Knight.prototype = Object.create(Piece.prototype);
Knight.prototype.constructor = Knight;
function Knight(square, color) {
Piece.call(this, square, color);
this.type = KNIGHT;
}
Knight.prototype.get_path = function(to) {
var h_movement = Math.abs(this.square.file - to.file);
var v_movement = Math.abs(this.square.rank - to.rank);
if ((h_movement === 2 && v_movement === 1) || (h_movement === 1 && v_movement === 2)) {
return [to];
}
return null;
};
Ve Chrome'un console.log çıkışına göre izleyin olarak nesne görünüyor beklendiği gibi, çalışıyor: bir kare nesnenin tanımı var,
Knight {square: Square, color: "w", type: "N"}
color: "w"
square: Square
type: "N"
__proto__: Knight
constructor: Knight(square, color)
get_path: (to)
__proto__: Piece
Şimdi farklı bir kod dosyasında, hangi loo Böyle ks:
Kare
function Square(file, rank) {
this.file = file;
this.rank = rank;
this.equals = function(other) {
return (this.file === other.file && this.rank === other.rank);
};
this.toString = function() {
return String(file) + ' ' + String(rank);
};
this.getSquareAtOffset = function(file, rank) {
file = Number(file)? file : 0;
rank = Number(rank)? rank : 0;
return new Square(this.file + file, this.rank + rank);
}
};
beklediğiniz muhtemelen gibi aynı zamanda, gayet iyi çalışıyor ve bu nesnenin konsol günlüğü şu şekilde olmaktadır: Ayrıca
Square {file: 1, rank: 1}
equals: (other)
file: 1
getSquareAtOffset: (file, rank)
rank: 1
toString:()
__proto__: Square
Bu iyi çalışıyor. Yani sorum şu, hangi yaklaşımın hangi durumda daha iyi olduğu? Bir özellik olarak işlev gören ve diğeri de prototip özelliğine sahip olan iki nesne arasındaki fark nedir?