【发布时间】:2018-04-02 02:24:21
【问题描述】:
如何在每次调用变量时调用函数?下面的代码是可能的吗? 我打算每次使用“num”时调用一个函数..
if (num == 100 && num== 200 && num==300) {
console.log('it works!');
}
【问题讨论】:
-
你能请展示一个你将如何使用它的例子吗?
标签: javascript function variables
如何在每次调用变量时调用函数?下面的代码是可能的吗? 我打算每次使用“num”时调用一个函数..
if (num == 100 && num== 200 && num==300) {
console.log('it works!');
}
【问题讨论】:
标签: javascript function variables
valueOf 滥用是一种选择,但还有很多其他选择。
const num = {
value: 0,
valueOf: function() {
this.value += 100;
return this.value;
}
}
if (num == 100 && num== 200 && num==300) {
console.log('it works!');
}
【讨论】:
您可以使用 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
【讨论】:
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');
}
【讨论】: