如何在每次调用变量时调用函数?下面的代码是可能的吗? 我计划每次调用一个函数" num"使用..
if (num == 100 && num== 200 && num==300) {
console.log('it works!');
}
答案 0 :(得分:3)
valueOf
滥用是一种选择,但还有很多其他选择。
const num = {
value: 0,
valueOf: function() {
this.value += 100;
return this.value;
}
}
if (num == 100 && num== 200 && num==300) {
console.log('it works!');
}

答案 1 :(得分:1)
您可以使用Javascript proxy object为基本操作定义自定义行为,包括分配。
您可以使用它覆盖数组,对象等的方法。
请在MDM中找到一个示例。这个有一个用于设置属性值的陷阱。我们可以为set,has和其他操作系统设置陷阱,比如构造函数等。
let validator = {
set: function(obj, prop, value) {
if (prop === 'age') {
if (!Number.isInteger(value)) {
throw new TypeError('The age is not an integer');
}
if (value > 200) {
throw new RangeError('The age seems invalid');
}
}
// The default behavior to store the value
obj[prop] = value;
// Indicate success
return true;
}
};
let person = new Proxy({}, validator);
person.age = 100;
console.log(person.age); // 100
person.age = 'young'; // Throws an exception
person.age = 300; // Throws an exception
答案 2 :(得分:1)
toString
也有效:
const num = {
value: 0,
toString: function() {
this.value += 100;
return this.value;
}
}
if (num == 100 && num== 200 && num==300) {
console.log('it works!');
}
但是,valueOf
首选
const num = {
value: 0,
toString: function() {
this.value += 1000;
return this.value;
},
valueOf: function() {
this.value += 100;
return this.value;
}
}
if (num == 100 && num == 200 && num == 300) {
console.log('it works with valueOf');
}
if (num == 1000 && num == 2000 && num == 3000) {
console.log('it works with toString');
}