जब तक आप Function.prototype.call
और Function.prototype.apply
को फिर से परिभाषित (और अपने कार्य करने के लिए एक और तर्क पारित), वहाँ ऐसा करने का कोई तरीका नहीं है ()
।
एक general function call के लिए और Function.prototype.apply
के लिए विनिर्देश की तुलना करें - प्रत्येक वास्तव में एक ही तरीके से समारोह के आंतरिक कोड कहते हैं, और कोई बाहरी संपत्ति सेट है कि आप देने के लिए है कि क्या कहा जाता है में सक्षम है कि या नहीं का उपयोग कर रहा है।
आंतरिक समारोह [[Call]]
के लिए विनिर्देश देखें:
13.2.1 [[Call]]
जब एक समारोह वस्तु एफ एक यह मान और तर्क, की सूची के साथ कहा जाता है के लिए [[Call]]
आंतरिक विधि निम्नलिखित कदम उठाए गए हैं:
- funcCtx को F के मान का उपयोग करके फ़ंक्शन कोड के लिए एक नया निष्पादन संदर्भ स्थापित करने का परिणाम होना चाहिए [[औपचारिक पैरामीटर]] आंतरिक संपत्ति, उत्तीर्ण तर्क सूची तर्क, और यह मान 10.4.3 में वर्णित है।
- परिणामस्वरूप फंक्शनबॉडी का मूल्यांकन करने का नतीजा है जो एफ की [[कोड]] आंतरिक संपत्ति का मूल्य है। यदि एफ में [[कोड]] आंतरिक संपत्ति नहीं है या यदि इसका मान एक खाली फ़ंक्शनबॉडी है, तो परिणाम (सामान्य, अपरिभाषित, खाली) है।
- निष्पादन संदर्भ funcCtx से बाहर निकलें, पिछले निष्पादन संदर्भ को पुनर्स्थापित करना।
- यदि परिणाम। टाइप फेंक दिया जाता है तो परिणाम निकाल दें .value।
- यदि परिणाम। प्रकार वापस आ गया है तो परिणाम वापसी करें। मूल्य।
- अन्यथा परिणाम। टाइप सामान्य होना चाहिए। अपरिभाषित वापसी।
वहाँ है कि क्या यह call
/apply
या नहीं का उपयोग कर कहा जाता है से एक समारोह के संचालन को बदलने के लिए कोई प्रावधान नहीं है - केवल बात यह है कि बदल जाता है कि वह क्या करता समारोह के लिए ही तर्क हैं और क्या this
है समारोह के भीतर होना था।
स्रोत
2013-10-29 12:56:28
मैं कहूंगा कि आपका मतलब है 'foo.call (यह, {बार: 1}));' और 'foo.apply (यह, [{बार: 1}])); सही? –