किसी चर के प्रत्येक कॉल को फ़ंक्शन कैसे कॉल करें? क्या नीचे दिया गया कोड संभव है? मैं हर बार "num" का उपयोग करने पर एक फ़ंक्शन कॉल करने की योजना बना रहा हूं ..

if (num == 100 && num== 200 && num==300) {
  console.log('it works!');
}
1
Yamoshi Wolverine 2 अप्रैल 2018, 05:24

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!');
}
3
CertainPerformance 2 अप्रैल 2018, 02:26

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');
}
1
xianshenglu 2 अप्रैल 2018, 02:40

परिभाषित करने के लिए आप Javascript प्रॉक्सी ऑब्जेक्ट का उपयोग कर सकते हैं असाइनमेंट सहित मौलिक संचालन के लिए कस्टम व्यवहार।

आप इसका उपयोग करके सरणियों, वस्तुओं आदि के तरीकों को ओवरराइड कर सकते हैं।

कृपया एमडीएम में दिया गया एक उदाहरण देखें। संपत्ति मूल्यों को स्थापित करने के लिए इसमें एक जाल है। हमारे पास सेट, है और अन्य ऑपरेशंस जैसे कंस्ट्रक्टर आदि के लिए ट्रैप हो सकते हैं।

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

1
Sebin Benjamin 2 अप्रैल 2018, 02:39