Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
Prototypal Inheritance in JavaScriptजावास्क्रिप्ट में रिकर्सिव प्रोटोटाइप विरासत?
से मैं पिछले अभियानों से इनहेरिट नई वस्तुओं बनाने के लिए थोड़ी देर के लिए इस कोड का उपयोग किया गया है। हालांकि मैं थोड़ा आश्चर्यचकित हो गया।
a = {
foo: [1,2,3]
}
b = Object.create(a);
// b.foo -> [1,2,3]
b.foo = "test";
// b.foo -> "test"
// a.foo -> [1,2,3]
c = Object.create(a);
// c.foo -> [1,2,3]
c.foo[0] = 'test';
// c.foo -> ["test",2,3]
// a.foo -> ["test",2,3]
c.foo
परिवर्तित करने का प्रयास में मैं a.foo
बजाय बदल गया है, c.foo
परिवर्तन दिखा है क्योंकि यह a
से इनहेरिट है। एकमात्र समाधान मैं अभी देख ही b
के प्रत्यक्ष गुण संशोधित करने के लिए है:
d = Object.create(a);
d.foo = Object.create(a.foo);
d.foo[0] = 'text';
मैं वहाँ एक बेहतर समाधान मैं याद कर रहा हूँ है यकीन है! मैं मूल वस्तुओं को संशोधित करने के जोखिम के बिना पुरानी वस्तुओं से नई वस्तुओं को कैसे बना सकता हूं?
यह कहना है कि एक मूल्य "मूल्य/संदर्भ द्वारा पारित" है गलत है। मूल्य हमेशा जेएस में पारित किया जाता है। पैरामीटर्स ओटीओएच हमेशा "मूल्य से कॉल करें" का अर्थ है, जिसका तर्क है कि आप पैरामीटर सेट करते हैं, तर्क के बराबर होगा। पैरामीटर और तर्कों के बीच भी अंतर करें। पैरामीटर्स वास्तविक चर हैं, और तर्क मान हैं। 'फ़ंक्शन में (x) {} a (1) '' x' पैरामीटर है और '1' तर्क (/ मान) है। –
उह ... मैंने या तो उल्लेख नहीं किया ... और Arrays विशेष वस्तुओं हैं। नोड से: var arr = [1, 2, 3]; > फ़ंक्शन कूल (टीएआरआर) {tArr.push (4);} > ठंडा (एआर); > arr; [1, 2, 3, 4] – tjameson