मैं एक ही सवाल था और उसके बाद, इस सवाल का जवाब मिल गया इस प्रकार है::
यह वास्तव में
(0, foo.fn)();
के लिए याद रखें कि जावास्क्रिप्ट में, जब foo.fn()
शुरू हो जाती है है यहाँ एक उदाहरण है , फिर fn
के अंदर, this
foo
पर बाध्य है। आप
var g = foo.fn;
g();
का उपयोग करते हैं तो जब g
ऊपर उत्पन्न होता है, this
वैश्विक वस्तु के लिए (window
एक वेब ब्राउज़र के संदर्भ में,) बाध्य है।
तो क्या आपको ऊपर की तरह g
परिभाषित करने की आवश्यकता है? क्या आप
(foo.fn)();
उत्तर कुछ नहीं कर सकते हैं। जावास्क्रिप्ट इसे foo.fn();
जैसा ही मानता है क्योंकि यह foo.fn
अनावश्यक ()
के साथ हटाया जा सकता है।
लेकिन वहाँ एक तरीका है चारों ओर पाने के लिए है, और यह वास्तव में the comma operator, which Mozilla stated as
उपयोग करने के लिए अल्पविराम ऑपरेटर (बाएं से दाएं) ने अपने ऑपरेंड से प्रत्येक का मूल्यांकन करता है और पिछले संकार्य
का मान देता है
तो का उपयोग कर
(0, foo.fn)();
(0, foo.fn)
समारोह, के लिए एक संदर्भ के लिए मूल्यांकन किया जाएगा lik ई g
उपरोक्त, और फिर फ़ंक्शन का आह्वान किया जाता है। और फिर, this
foo
से बाध्य नहीं है लेकिन वैश्विक वस्तु के लिए बाध्य है।
तो इस तरह से लिखा कोड, "बाध्यकारी कटौती" है।
उदाहरण:
var foo = {
fullName: "Peter",
sayName: function() { console.log("My name is", this.fullName); }
};
window.fullName = "Shiny";
foo.sayName(); // My name is Peter
(foo.sayName)(); // My name is Peter
(0, foo.sayName)(); // My name is Shiny
की
स्रोत
2017-09-25 03:48:11
संभव डुप्लिकेट [जावास्क्रिप्ट अल्पविराम ऑपरेटर] (http://stackoverflow.com/questions/5580596/javascript-comma-operator) –
बाहर curiousity की, आप में से अधिक पोस्ट कर सकते हैं यह कहां दिखाई देता है? – Austin
मैं https://www.google.fr/xjs/_/js/s/sy46,zr/rt=j/ver=-wnZQEUYm8E.en_US./d=0/rs=AItRSTNMBUOhWluxPqsKFY9CVTnMlxNz6w – korko