试图用头戴围绕javascript组合使用assign。我的基础对象上的属性意外地在实例之间共享。我究竟做错了什么?我有...Javascript Object Object with assign&Object.create
Stat.js:
import assign from 'object-assign';
var Stat = assign({}, {
_value: undefined,
get: function() {
return this._value;
},
set: function(n) {
var max = this.getMax();
if(n > max) {
this._value = max;
} else {
this._value = n;
}
},
getMax: function() {
return 1;
}
});
module.exports = Stat;
HitPoints.js:
import assign from 'object-assign'
import Stat from './Stat.js';
var HitPoints = assign({}, Stat, {
getMax: function() {
return 100;
}
});
module.exports = HitPoints;
Unit.js:
import assign from 'object-assign';
import HitPoints from 'HitPoints.js';
var Unit = assign({}, {
hp: Object.create(HitPoints)
}
);
module.exports = Unit;
用法:
import Unit from 'Unit.js';
var u1 = Object.create(Unit);
console.log(u1.hp.get()); // undefined - ok
u1.hp.set(11);
console.log(u1.hp.get()); // 11 - ok
var u2 = Object.create(Unit);
console.log(u2.hp.get()); // 11 - ???
u2.hp.set(22);
console.log(u1.hp.get()); // 22 - ???
console.log(u2.hp.get()); // 22
感谢您的帮助......
这里使用'assign'没有任何好处。 'hp'是共享的,因为'u1'和'u2'都有'Unit'(单个对象)作为原型。 'Object.create(Unit)'不会创建'Unit'的*副本,如果这就是你的想法。 –
@Felix Kling我明白了...所以,我该如何做到这一点。我是来自AS3的javascript n00b。以上内容受到JavaScript对象[这个解释](http://www.datchley.name/delegate-object-to-classical-inheritance/)的启发。 –
我建议使用构造函数:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript#Custom_objects。 –