如何使用object.assign()从其他对象引用基本对象属性
How to reference base object properties from other objects using Object.assign()
我试图遵循Kyle Simpson的想法,即只使用对象而不使用函数进行实际的原型继承。我想看看我是否可以使用Object.create和Object.assign向对象添加mixin,这完全有效。然后,我尝试更进一步,将mixin中属性的一些值建立在基础对象中属性的值的基础上。我总是因为我试图与之合作的价值而得到NaN。这是代码:
function generatorFactory() {
var basePlayer = {
x: 0,
y: 0,
baseHealth: 50
};
var generatePlayer = function() {
return basePlayer;
};
return generatePlayer;
}
var playerGenerator = generatorFactory();
var basicPlayerObject = playerGenerator();
var heavyArmor = {
defense: 15,
attack: 9
};
var lightArmor = {
defense: 7
};
var swordsman = {
health: this.baseHealth + 10
};
var knifeFighter = {
health: this.baseHealth - 10
};
var sigurd = Object.assign(Object.create(basicPlayerObject), heavyArmor, swordsman);
console.log(sigurd.health);
console.log(sigurd.defense);
console.log(sigurd.attack);
console.log("Player coordinates: (" + sigurd.x + ", " + sigurd.y +")");
我想让剑客混装调整玩家的基础健康。我试着用"this",但无济于事。我开始觉得我完全错了。我到底做错了什么?
问题在于使用this
的方式。当您定义一个对象时,this
仍然指周围的范围,而不是您定义的新对象:
var self = this;
var swordsman = {
checkThis: self === this // true
};
实现您想要做的事情的一种方法是将这些对象更改为函数。
function initSwordsman(obj) {
obj.health = obj.baseHealth + 10;
}
var sigurd = Object.assign(Object.create(basicPlayerObject), heavyArmor);
initSwordsman(sigurd);
对象文字中的this
没有引用您所期望的内容。如果您希望它动态引用访问属性的对象,则需要使用getter:
var swordsman = {
health: {
get() { return this.baseHealth + 10; },
enumerable: true,
configurable: true
}
};
var knifeFighter = {
health: {
get() { this.baseHealth - 10 },
enumerable: true,
configurable: true
}
};
并且需要将这些属性描述符传递给Object.create
而不是Object.assign
:
var sigurd = Object.assign(Object.create(basicPlayerObject, swordsman), heavyArmor);
相关文章:
- 引用对象中的通用值
- 如何使用object.assign()从其他对象引用基本对象属性
- 返回 JavaScript 类值而不是对象引用
- Facebook:当发布期望对象引用时显示打开的图形对话框
- Javascript-如何从字符串/对象引用回调
- 将其用于对象引用
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- 使用连字符引用对象的属性名称
- Javascript:将类/对象引用设置为 NULL,内存中的子对象/类会发生什么
- 这在 Object 方法中不引用对象,而是引用函数绑定到的标记
- Javascript对象文字,如何使用“this”来引用对象中的变量
- 在 Jquery 中,我可以存储对象引用并在以后使用它吗?
- 将对象函数传递给请求动画帧时丢失对象引用
- JavaScript ecma6中的对象引用
- 在JSON中存储对象引用
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- AngularJS select with ng选项不更新父作用域中的引用对象属性
- 对象引用的隐式传递是如何工作的
- 按对象的 ID 删除对选定对象的对象引用
- 在调用的函数中使用对象引用(this)