JS prototype链的疑惑

为什么在A指定prototype后,其先前创建的实例没有得到prototype中的方法?
而奇怪的是,
var pc= new C();也是在定义prototype之前创建,但却可以获得prototype中的方法。

请指教,谢谢。

而另一方面,
[code="javascript"]
function A() {this.walk= function() {alert('I can walk');}}
function B() {this.swing= function() {alert('I can swing');}}
function C() {this.fly= function() {alert('I can fly');}}

var a= new A();
alert(a.fly == undefined);

var cp= new C();
B.prototype= cp;
A.prototype= new B();

var aa= new A();
aa.fly();
aa.swing();
alert(a.fly == undefined,);
C.prototype.jump= function() {alert('Jump');}
aa.jump(); //OK
alert(a.jump == undefined); //Why?
alert(pc.jump != undefined); //这里应该与a的情形相同,但确
[/code]

看了问题http://www.iteye.com/problems/3251 中的解释后
再尝试修改A.prototype

[code="javascript"]
A.prototype.jump= function() { alert("Self Jump"); };
alert(a.jump == undefined); //Why?
[/code]
奇怪的是aa.jump()被修改了,但a.jump依然不存在

[url]http://www.iteye.com/problems/3251 [/url]
:oops: 这个...这个,之前那个回答完全是根据自己的理解说的,可能误导了楼主吧.

这个回答才更严谨一点.
[quote=ggmmaallee]直接修改prototype,不会影响他的实例,修改constructor的prototype的field才会改变实例[/quote]

也就是当你直接修改prototype的值的时候,是不会影响到之前所创建的实例的.但是如果修改prototype中的一个属性,就会影响到之前所创建的实例了.

所以你下面的这段代码根本没有影响到a对象.
var cp= new C();

B.prototype= cp;

A.prototype= new B();

而在prototype被修改之后,再创建的aa对象,它所使用的是C的prototype了.
而下面又修改了C的prototype中的jump属性.所以影响到了aa.

...不好意思了.之前那个回答误导你了.