में बाल ऑब्जेक्ट्स से पैरेंट ऑब्जेक्ट फ़ंक्शंस को कैसे कॉल करते हैं, इसलिए, मैं जॉन रेसिग के blog पर पढ़ रहा था, अपने micro-templating javascript engine को देखा और प्रोटोटाइप विरासत की मेरी समझ को गहरा बनाने के लिए जावास्क्रिप्ट के लिए अपने स्वयं के टेम्पलेट प्रबंधन सिस्टम को आजमाने और कार्यान्वित करने का निर्णय लिया । हालांकि, जिस मिनट में मैंने इसे लिखना शुरू किया, मैं एक समस्या में भाग गया।आप जावास्क्रिप्ट
function template_manager() { };
template_manager.prototype = {
tags: {},
templates: {},
output: {},
default_template: "default",
set: function (tags, template_name) {
template_name = "Greetings!";
//template_name = this._util.template(this.nothing, this.default_template);
console.log(template_name);
},
get: function(tags, template_name) {
console.log("Getting");
},
unset: function(tags, template_name) {
console.log("Removing");
},
render: function(template_name) {
console.log("Rendering");
},
//_util goes here
};
// Take it for a quick test drive.
test = new template_manager;
test.set();
test.get();
test.unset();
test.render();
तो मैं कुछ सामान्य कोड पर काम शुरू कर दिया, और मैं इसे एक उपयोगिता वस्तु में डाल करने का फैसला किया:
_util: {
// Used to set the default values for optional arguments
optional: function(obj, def_value) {
return (typeof obj === "nothing") ? obj : def_value;
},
template: function(template_name) {
return this._util.optional(template_name, this.default_template);
},
},
और अब
शुरू करने के लिए, यहाँ मेरी आधार कोड है , जब मैं अपने फ़ंक्शन को अपने set()
फ़ंक्शन में कॉल करने का प्रयास करता हूं तो मुझे निश्चित रूप से त्रुटि मिलती है क्योंकि this
template_manager
ऑब्जेक्ट की बजाय _util
ऑब्जेक्ट पर इंगित करता है। मैंने jQuery extend
विधि पर एक नज़र डाली है, और मुझे लगता है कि मैं समझता हूं कि यह क्या कर रहा है। मेरा सवाल है, क्या मैं को अपने स्वयं के/उपयोग jQuery/extend
विधि को लागू करने के लिए की आवश्यकता है, या मेरे _util
ऑब्जेक्ट से template_manager
ऑब्जेक्ट को कॉल करने का कोई और तरीका है?
(पी एस मैं डगलस Crockford के article प्रोटोटाइप विरासत पर देखा है, और मुझे लगता है कि जवाब नहीं है, लेकिन मुझे डर है मैं पूरी तरह से अभी तक यह समझ में नहीं आता हूँ।)
@ क्रिस, मुझे डबल चेकिंग के लिए सही सेवा प्रदान करता है। इसे पकड़ने के लिए धन्यवाद! –