javascript - 我可以创建两个包含不同方法的对象实例吗
问题描述
如果构造函数中的方法对于所有实例都相同,我完全理解 JavaScript 中原型继承的概念。但是,如果我想通过构造函数创建对象但希望方法为每个实例产生不同的结果怎么办?
function Player (health, power, stamina) {
this.health = health;
this.power = power;
this.stamina = stamina;
this.recovery = function () {
return this.health += 20;
}
}
var hulk = new Person ( 100,80,60 );
var superman = new Person ( 100,70,50);
我的问题是,当我调用恢复方法时,我希望 hulks 恢复添加 20,但我希望超人添加 40。如果我将方法添加到原型而不是直接添加到对象中,我仍然希望该方法仅适用于 hulk和一个不同的超人。我是否为此创建对象文字并为每个对象指定不同的方法?如果我有数百个字符,这似乎很长!或者我是否要向 Person 原型添加另一个多个方法,即使它只会被一个实例使用?在仍然使用构造函数的同时,使超人的恢复比绿巨人更好的最佳方法是什么?谢谢大家。
解决方案
将第 4 个参数传递给Player
,该参数表示健康恢复:
function Player(health, power, stamina, healthRegen) {
this.health = health;
this.power = power;
this.stamina = stamina;
this.healthRegen = healthRegen;
this.recovery = function() {
return this.health += this.healthRegen;
}
}
var hulk = new Person(100, 80, 60, 20);
var superman = new Person(100, 70, 50, 40);
如果大多数角色都有特定数量的生命恢复(比如 20),而您只希望superman
和其他几个角色拥有不同的生命恢复,则可以使用默认参数来避免写这么多20
:
function Player(health, power, stamina, healthRegen = 20) {
this.health = health;
this.power = power;
this.stamina = stamina;
this.healthRegen = healthRegen;
this.recovery = function() {
return this.health += this.healthRegen;
}
}
var hulk = new Person(100, 80, 60);
var superman = new Person(100, 70, 50, 40);
var normalPerson = new Person(50, 50 50);
上图,当所需的生命恢复值不是 20时,只需要传递第 4 个参数即可;否则,它将默认为 20。
推荐阅读
- android - 如何在 android studio 中生成应用程序安装程序?
- reactjs - 是否可以在反应中操纵布局并保存它?
- docker - 无法在 docker 中运行 nginx
- postgresql - 如何使用 timescaleDB 按月计算 time_bucket
- ios - App Store:应用程序已发布并在 9/10 设备上显示,但不是全部
- javascript - Javascript lodash按第一项合并数组项
- angular - 服务器页面刷新时的角度路由出现 404.0 错误
- python - 使用 tweepy 将波斯文本 unicode 转换为波斯字符
- html - 谷歌标签管理器导致页面底部出现空白图像
- sql - 查询以获取基于多于 1 列的行中的总计