我想在我的javascript对象上创建一个依赖属性。 我在代码片段中有一个对象。我想更新isPawn属性;当isNew属性更改时。
有没有办法自动执行类似的操作?
if(isNew){
isPawn = true;
}
但是它们不必相同。当isPawn为'true'时,isNew可以为'false'
我的对象:
var Soldier = function (id,name) {
this.id = id;
this.name = name;
this.isPawn = false;
this.isNew = false;
}
答案 0 :(得分:1)
是的,您可以使用设置器来完成此操作,下面是一个示例:
class Soldier {
#isNew = false;
constructor(id,name) {
this.id = id;
this.name = name;
this.isPawn = false;
}
set isNew(val) {
this.#isNew = val;
this.isPawn = val;
}
get isNew() {
return this.#isNew;
}
}
const soldier = new Soldier();
soldier.isNew = true;
console.log('isNew:', soldier.isNew, 'isPawn', soldier.isPawn);
soldier.isNew = false;
console.log('isNew:', soldier.isNew, 'isPawn', soldier.isPawn);
soldier.isPawn = true;
console.log('isNew:', soldier.isNew, 'isPawn', soldier.isPawn);
#isNew
是private field,在这种情况下,我使用它来跟踪isNew
的值(getter应该返回什么)。
以下是使用函数而不是类的示例:
var Soldier = function(id, name) {
this.id = id;
this.name = name;
this.isPawn = false;
this.isNewPriv = false;
Object.defineProperty(this, 'isNew', {
set: function(val) {
this.isNewPriv = val;
this.isPawn = val;
},
get: function() {
return this.isNewPriv
}
});
}
var soldier = new Soldier(1, 'none');
soldier.isNew = true;
console.log("isNew:", soldier.isNew, "isPawn:", soldier.isPawn);
soldier.isNew = false;
console.log("isNew:", soldier.isNew, "isPawn:", soldier.isPawn);
soldier.isPawn = true;
console.log("isNew:", soldier.isNew, "isPawn:", soldier.isPawn);
答案 1 :(得分:0)
创建一个类并根据需要实例化
class Soldier {
constructor(id, name, isNew) {
this.id = id;
this.name = name;
this.isPawn = isNew? true : {something : "whaterverElse"};
this.isNew = isNew;
}
DoSomething(){
this.isNew = false;
}
}
var soldier = new Soldier(1, 'Tim', true);
console.log(soldier);
function somethingElseHappened(){
soldier.DoSomething();
}
somethingElseHappened();
console.log(soldier);
答案 2 :(得分:0)
您可以为此属性设置默认值,如下所示:
var Soldier = function (id,name,isPawn = false,isNew = false) {
this.id = id;
this.name = name;
this.isPawn = isPawn;
this.isNew = isNew;
}
,如果您想为任何对象更改其中的值,只需执行以下操作:
var newSolider = new Solider(1,"foo",false,true);