मुझे इस कोड चलाएँ:जावास्क्रिप्ट विरासत जादू
function foo() {
console.log("foo");
var self = this;
this.a = function() {
return arguments.length == 0 ? self.b : (self.b = arguments[0]);
};
};
function bar() {
};
bar.prototype = new foo();
var a = new bar();
var b = new bar();
console.log(a.a());
b.a(true);
console.log(a.a());
मैं निम्नलिखित उत्पादन प्राप्त करें: foo, undefined, true
क्या मुझे समझ नहीं आता कैसे वस्तु निर्माता समारोह foo
द्वारा लौटाए गए किसी तरह एक आवंटित करने के लिए प्रबंधन करता है b
के लिए नई मेमोरी लोकेशन। मैं पूरी तरह से अंतिम आउटपुट true
होने की उम्मीद कर रहा था क्योंकि मुझे केवल 1 foo
आउटपुट मिलता है।
यह काम बहुत अच्छा है, लेकिन यह जादू की तरह बहुत अधिक लगता है।
मेरी समस्या वास्तव में यहां है कि मैं प्रारंभिक क्रम (या श्रृंखला) सेट करना चाहता हूं। मुझे जो एहसास हुआ है वह है कि foo
कोई तर्क नहीं ले सकता है, क्योंकि इसे बेस (या प्रकार के टेम्पलेट) प्रदान करने के लिए केवल एक बार कहा जाता है।
मैं एक बहुत आसान स्कीमा वसीयत के लिए जहां foo
मानकों (क्योंकि bar
विरासत foo
) bar
से foo
के लिए पारित किया जाना है कि है चाहते हैं। bar
से foo.apply(this, arguments)
पर कॉल करने जैसे कुछ ठीक है, लेकिन प्रोटोटाइप सेट करने के लिए कॉल बिना तर्क के किया जाना है, मुझे किसी भी तरह से दो अलग-अलग बताए जाने का एक स्पष्ट तरीका है।
लेकिन मैं वास्तव में वस्तुओं है कि विरासत के कुछ प्रकार, केवल एक चीज मैं वास्तव में के बारे में, वस्तुओं निर्माण कर रही है सही ढंग से देखभाल के लिए अनुमति देते हैं बनाने के चारों ओर एक पूरे सेवा के निर्माण के लिए नहीं चाहता ...
मुझे लॉग इन 'foo, undefined, true' मिलता है। अंतिम 'अपरिभाषित' क्रोम डेवलपर टूल्स में दिखाई देता है लेकिन यह सिर्फ 'console.log' का वापसी मान है। वैसे भी आपके पास केवल 3 लॉग हैं। – pimvdb
हाँ, यह सही है, मैंने बस क्रोम कंसोल से आउटपुट से कॉपी किया है, याद किया कि ... –
सवाल क्या है? – user123444555621