如何在使用时检测变量?

时间:2018-04-02 02:24:21

标签: javascript function variables

如何在每次调用变量时调用函数?下面的代码是可能的吗? 我计划每次调用一个函数" num"使用..

if (num == 100 && num== 200 && num==300) {
  console.log('it works!');
}

3 个答案:

答案 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');
}