创建新的子类对象时设置父类中定义的变量时出现问题
Trouble setting variables defined in parent class when creating a new subclass object
我一直在尝试学习Javascript继承结构的来龙去脉,但我遇到了这个问题。我正在尝试创建多个子类对象,并通过在创建时传递变量来立即为它们赋值。
例如,在父类下面,GamePiece
在创建时接收一个随机属性作为变量,并将其设置为myProperty
这在创建新的GamePiece
对象时当然可以正常工作。但是,如果我想在创建 Pawn
对象时设置该变量,它不会传递到其父对象并且保持未设置状态。显而易见的解决方法是只在子类上再次定义变量,但是,如果我错了,请纠正我,这似乎违背了定义父类的目的。您也可以通过将参数作为Pawn.prototype = new GameObject("foo");
传递来成功设置变量,但这在创建多个Pawn()
对象时没有帮助。有没有我缺少的常用方法?
var GamePiece = function (randomProperty) {
this.myProperty = randomProperty || "never set";
this.print = function () {
console.log(this.myProperty);
}
}
var Pawn = function (randomProperty) {
this.print = function () {
console.log(this.myProperty);
}
}
//Setting a value on creation
piece = new GamePiece("foo");
piece.print(); // Produces "foo" naturally
//Setting the prototype
Pawn.prototype = new GamePiece();
//Try to pass value through the creation of subclass
pawn = new Pawn("foo");
pawn.print(); // Produces "never set"
您必须在当前this
的上下文中调用父类,使用call
或apply
方法:
var GamePiece = function (randomProperty) {
this.myProperty = randomProperty || "never set";
this.print = function () {
console.log(this.myProperty);
}
}
var Pawn = function (randomProperty) {
Game.call(this, randomProperty);
// or Game.apply(this, [randomProperty]);
}
但是最好将方法保留在原型中。所以下一个代码会更好:
var GamePiece = function (randomProperty) {
this.myProperty = randomProperty || "never set";
//... some another properties initialization
};
GamePiece.prototype.print = function () {
console.log(this.myProperty);
};
var Pawn = function (randomProperty) {
Game.call(this, randomProperty);
// or Game.apply(this, [randomProperty]);
//... some Pawn properties initialization
};
Pawn.prototype = Object.create(Game.prototype, { constructor: { value: Pawn }});
Pawn.prototype.someMethod = function() {
// Some Pawn method logic
};
但是 ES6 即将到来(将于 2015 年 6 月recommendation
),因此您可以开始准备使用它们。看这里,这里和这里
相关文章:
- 得到"全局未定义“;全局变量定义清楚时出错
- 使用变量的名称,然后为该变量定义函数
- Javascript 从 php 变量定义 getElementById()
- 使用变量定义宽度和高度
- 函数内部的JavaScript全局变量定义
- Javascript变量定义-澄清
- 为多个变量定义相同的类型,在Webstorm中识别
- 如何用变量定义一个数组,然后用一个数字填充每个数组
- 画布的奇怪行为 上下文变量定义位置导致选项卡处于非活动状态时画布呈现冻结
- 为什么要显式将变量定义为未定义
- Gulp/Grunt 获取触笔工作表中的所有颜色变量,并将它们作为变量定义写入文件
- 是否可以在 Node.js 中为模块变量定义 SET 函数
- ES6 块范围的变量定义作为条件
- 使用 jQuery 获取由变量定义的文本输入的值
- :gt()选择器,为变量定义的索引
- 如何在ASP.NET中将Javascript变量定义为Session
- 带有用户输入的ajax请求变量定义有问题
- 使用ElasticSearch搜索变量定义字段
- 变量定义,不同的输出
- JavaScript变量定义和范围