Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mail From: JJ Newsgroups: comp.lang.javascript Subject: Re: Does copying the prototype reference from another constructor function maintain the prototype chain? Date: Sat, 5 Jan 2013 10:57:02 +0000 (UTC) Organization: A noiseless patient Spider Lines: 57 Message-ID: References: Injection-Date: Sat, 5 Jan 2013 10:57:02 +0000 (UTC) Injection-Info: mx04.eternal-september.org; posting-host="8e9f622bcca1dbb9ccb65df5db97a1dc"; logging-data="27941"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19vwVhgYCTwIyTwPDQON2ikpQ13cHIKX3k=" User-Agent: Xnews/5.04.25 X-Face: \*\`0(1j~VfYC>ebz[&O.]=,Nm\oRM{of,liRO#7Eqi4|!]!(Gs=Akgh{J)605>C9Air?pad{sSZ09u+A7f<^paR"/NH_# wrote: > I've been a Javascript dabbler for a few years, and have just embarked > on learning more advanced stuff. > > I have the following question in a tutorial by John Resig: > > At http://ejohn.org/apps/learn/#76, Resig mentions that only the > following maintains the prototype chain: > > Ninja.prototype = new Person(); > > However, I notice that even the following statement makes all the test > statements pass: > > Ninja.prototype = Person.prototype; > > Does it mean that using "Person.prototype" can actually be used instead > of "new Person()"? Yes. "Ninja.prototype = Person.prototype;" does create prototype inheritance, but with only 2 levels: Person and Object. The inheritance from Ninja and Person is the exact same. function Person(){} function Ninja(){} Ninja.prototype=new Person(); var ninjaNew=new Ninja(); console.log('ninjaNew'); console.log( ninjaNew.__proto__===Ninja.prototype ); //true console.log( ninjaNew.__proto__.__proto__===Person.prototype ); //true console.log( ninjaNew.__proto__.__proto__.__proto__===Object.prototype ); //true Ninja.prototype=Person.prototype; var ninjaProto=new Ninja(); console.log('ninjaProto'); console.log( ninjaProto.__proto__===Ninja.prototype ); //true console.log( ninjaProto.__proto__===Person.prototype ); //true console.log( ninjaProto.__proto__.__proto__===Person.prototype ); //false console.log( ninjaProto.__proto__.__proto__===Object.prototype ); //true