2011-09-01 20 views
8

मेरे पास जावास्क्रिप्ट में 'कॉल' पर एक प्रश्न है।जावास्क्रिप्ट में 'कॉल' कैसे काम करता है?

var humanWithHand = function(){ 
    this.raiseHand = function(){ 
     alert("raise hand"); 
    } 
} 

var humanWithFoot = function(){ 
    this.raiseFoot = function(){ 
     alert("raise foot"); 
    } 
} 

var human = function(){ 

    humanWithHand.call(this); 
    humanWithFoot.call(this); 

} 

var test = new human(); 

तो जब मैं 'कॉल' का उपयोग मानवविथहैंड.call (यह) के रूप में करता हूं, तो आंतरिक रूप से क्या होता है?

मानवविथहैंड परिवर्तनीय प्रतियां (या अंक?) अपनी गुणों और सदस्यों को मानव चर के प्रोटोटाइप में करता है?

+0

[एमडीएन दस्तावेज़ीकरण कॉल()] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call) – epascarello

उत्तर

7

.call()this मूल्य सेट और फिर तर्क आप .call() के लिए पारित साथ समारोह कहता है। आप .call() का उपयोग सीधे फ़ंक्शन को कॉल करने के बजाय करते हैं जब आप this मूल्य को बुलाए गए फ़ंक्शन के अंदर सेट करना चाहते हैं, बजाय इसे सामान्य रूप से सेट करने के लिए जो भी जावास्क्रिप्ट सेट किया जाए, उसे सेट करने दें।

.apply() एक बहन समारोह है। यह this मान भी सेट कर सकता है और यह किसी सरणी में तर्क ले सकता है, इसलिए इसका उपयोग तब किया जा सकता है जब आप किसी अन्य फ़ंक्शन कॉल से एक चर तर्क तर्क को पारित करने का प्रयास कर रहे हों या जब आप एक तर्क सूची प्रोग्रामेटिक रूप से बना रहे हों जिसमें भिन्न संख्या हो स्थिति के आधार पर तर्कों का।

9

येहुदा काट्ज़ में a good writeup जावास्क्रिप्ट की Function#call विधि है। उनके लेखन को आपके प्रश्न का उत्तर देना चाहिए, और इसके अलावा कई अनुवर्ती प्रश्न भी हैं।

जब आप एक समारोह सीधे कॉल, सामान्य सिंटैक्स का उपयोग:

var foo = function() { 
    console.log("foo"); 
    return this; 
}; 
foo(); // evaluates to `window` 

फिर this समारोह कॉल के अंदर जो कुछ भी this समारोह कॉल के बाहर है। डिफ़ॉल्ट रूप से, ब्राउज़र में, this किसी फ़ंक्शन कॉल के बाहर window है। तो ऊपर के रूप में फ़ंक्शन कॉल के अंदर, this डिफ़ॉल्ट रूप से window भी है।

जब आप एक समारोह विधि-कॉल सिंटैक्स का उपयोग फोन:

var bar = { 
    foo: function() { 
    console.log("foo"); 
    return this; 
    } 
}; 
bar.foo(); // evaluates to `bar` 

फिर this समारोह कॉल के अंदर सबसे दायीं ओर की अवधि के बाईं ओर वस्तु है: इस मामले में, bar में।

हम call का उपयोग करके इस स्थिति को अनुकरण कर सकते हैं।

आप एक वस्तु के बाहर एक समारोह की स्थापना की और समारोह कॉल एक वस्तु के लिए सेट के अंदर this से कॉल करने के लिए चाहते हैं, तो आप कर सकते हैं:

var foo = function() { 
    console.log("foo"); 
    return this; 
} 
var bar = { }; 
foo.call(bar); // evaluates to `bar` 

आप इस तकनीक का प्रयोग के रूप में अच्छी बहस पारित करने के लिए कर सकते हैं:

var foo = function(arg1, arg2) { 
    console.log("foo"); 
    return arg1 + arg2; 
} 
var bar = { }; 
foo.call(bar, "abc", "xyz"); // evaluates to `"abcxyz"` 
+0

ग्रेट स्पष्टीकरण –

संबंधित मुद्दे