कार्य पूर्ण वस्तुएं हैं। वे, जब किसी अन्य कार्य के लिए तर्क के रूप में पारित होते हैं, तो उनके दायरे को बरकरार न रखें। तो, निम्नलिखित कोड में ...
var obj1 = {
property1: "blah",
method1: function() {
alert(this.property1);
// do stuff
}
};
function func1 (passedFunction) {
passedFunction();
// do other stuff
}
func1(obj1.method1);
... func1
obj1.method1
फोन करेगा, लेकिन क्योंकि हम सभी किया है समारोह वस्तु पारित है यह नहीं alert
obj1
के property1
का मूल्य होगा, इसकी this
संदर्भ नहीं है। यही वह जगह है जहां call
और apply
आते हैं। वे आपको स्कोप इंजेक्ट करने की अनुमति देते हैं, फ़ंक्शन बताएं कि this
का अर्थ क्या होगा। निम्न उदाहरण काम करता है:
var obj1 = {
property1: "blah",
method1: function() {
alert(this.property1);
// do stuff
}
};
function func1 (passedObject, passedFunction) {
passedFunction.call(passedObject);
// do other stuff
}
func1(ob1, obj1.method1);
अब, हम मजबूर कर दिया है या स्पष्ट रूप से obj1.method1
बताया क्या उसके संदर्भ call
लागू है, और यह वस्तु यह this
के रूप में उपयोग करने के लिए पारित करके करेंगे।
call
और apply
लगभग समान हैं, सिवाय इसके कि वे कार्य को लागू किए जाने वाले अतिरिक्त तर्कों को कैसे प्रबंधित करते हैं। अधिक जानकारी के लिए एमडीएन पर इन लेखों को देखें: call, apply और Function।
यह सब कहा गया है, bb_graphics_GraphicsContext
एक निर्माता है। (जिसे आपने शायद अनुमान लगाया है।) आप इसे new
कीवर्ड, var obj1 = new bb_graphics_GraphicsContext();
का उपयोग करके आमंत्रित करते हैं। जब यह समारोह की लाइन 1 तक पहुँच जाता है, यह this
वस्तु लेता है, और सामान्य Object
निर्माता कहता है, स्पष्ट रूप से नई वस्तु this
(bb_graphics_GraphicsContext
निर्माता में) इंजेक्शन लगाने Object
निर्माता की this
के रूप में। मुझे लगता है कि इस समारोह/निर्माता का लेखक यह सुनिश्चित करने के लिए ऐसा कर रहा था कि bb_graphics_GraphicsContext
में नव निर्मित ऑब्जेक्ट बेस Object
के आधारभूत सभी विधियों को प्राप्त कर रहा था। लेकिन मुझे नहीं पता कि यह क्यों जरूरी होगा, जैसे कि bb_graphics_GraphicsContext
को new
कीवर्ड के साथ कॉल करें, यह स्वाभाविक रूप से इन सभी गुणों को पकड़ लेगा।
आप यह स्पष्ट करना चाहते हैं कि आप सोच रहे हैं कि विशेष रूप से एक निर्माता (यह "bb_graphics_GraphicsContext" फ़ंक्शन) अपने स्वयं के 'संदर्भ' संदर्भ के साथ ऐसा क्यों करेगा। – Pointy
इसे कन्स्ट्रक्टर माना जाता था। लेकिन अगर ऐसा है, तो फ़ंक्शन के बाहर कॉल करना होगा। – miqbal
मेरे उत्तर के अंत में यह अतिरिक्त जानकारी शामिल है कि यह क्या करता है, और यह क्यों किया जाता है कि यह क्यों किया जाता है। –