编辑 我仍然想知道为什么会发生这种情况,但是在阅读了原型上的一些内容之后,我的解决方案是不让这两个对象覆盖基本原型,如http://freshbrewedcode.com/derekgreer/2011/12/31 /solid-javascript-the-liskov-substitution-principle/
我有 3 个对象
基础对象称为对象控件
对象moneyBag 和对象movementPad 都继承了控件的原型。
钱袋和运动垫都有 2 个不同的绘图功能,所以代码看起来像这样
Money.prototype.Draw = function (context) {
console.log("foo2");
}
MovementPad.prototype.Draw = function (context) {
console.log("foo1");
}
在我的 HUD.js 中,这两个对象都被初始化了,然后 Hud 调用这两个对象绘制像这样
var movementControl = new MovementPad(screenManager, 1,1,1,1);
var money = new Money(screenManager, 10, 10, 37, 36);
// .... code skipped
this.Draw = function (context) {
movementControl.Draw(context);
money.Draw(context);
}
我的问题是这两个对象都没有调用它们的绘制方法。如果我先初始化motionPad,那么会调用draw方法,如果我先初始化money,只会调用draw方法。
我错过了对原型的理解/做错了什么,因为他们的两种绘制方法都不能被调用。
(下面有更多代码)
function control(x, y, width, height) {
"use strict"
this.x = x;
this.y = y;
this.width = width;
this.height = height;
var defaultImg = new Image();
defaultImg.src = "blank.png";
}
//.... code skipped
control.prototype.Draw = function (context) {
context.drawImage(defaultImg, this.x, this.y, this.width, this.height);
}
运动垫.js
MovementPad.prototype = control.prototype;
MovementPad.prototype.constructor = MovementPad;
function MovementPad(screenManager, x, y, width, height) {
"use strict"
this.x = x;
this.y = y;
this.width = width;
this.height = height;
//.... code skipped
MovementPad.prototype.Draw = function (context) {
context.drawImage(movementPad, x, y , width ,height);
}
}
Money.js
Money.prototype = control.prototype;
Money.prototype.constructor = Money;
function Money(screenManager, x, y, width, height) {
"use strict"
this.x = x;
this.y = y;
this.width = width;
this.height = height;
//.... code skipped
Money.prototype.Draw = function (context) {
context.drawImage(moneyBag, x, y, width, height);
}
}