JS 中prototype 的问题

[code="java"]
//Object对象的inObj设置为1;
Object.prototype.inObj = 1;

//定义A类;
function A(){
//给属性设置值为2;
this.inA = 2;
}

//给A类的inAproto属性设置为3;
A.prototype.inAProto = 3;

//这下面两句是什么意思?
B.prototype = new A();
B.prototype.constructor = B;

//定义B类;
function B(){
//给B类属性设置值为4;
this.inB = 4;
}

B.prototype.inBroto = 5;

x = new B;
document.write(x.inObj+","+x.inA+","+x.inAProto+","+x.inB+","+x.inBroto);
[/code]

//这下面两句是什么意思?
[b]B.prototype = new A();
B.prototype.constructor = B;[/b]

B.prototype = new A();

B.prototype.constructor = B;

这是实现继承的一个方式,可以叫原型拷贝
你可以暂时把圆形理解为java中的静态变量
A.prototype.inAProto = 3; 这样每个A的实例共用inAProto 这个属性
而this.inA = 2;每个实例中inA 都是不同的引用

new A()的结果是一个对象,其中包含了 inA = 2; inAProto = 3;这两个属性
再将这个对象赋给B的原型 B.prototype,那B这个类中就有了 inA = 2; inAProto = 3 这两个属性

因为prototype中默认都是有constructor这个属性的,这个属性指向创建B对象的函数 也就是 function B(){

//给B类属性设置值为4;

this.inB = 4;

} 但是 B.prototype = new A(); 这句话会把B.prototype中的constructor属性覆盖掉,变成了A.prototype.constructor,所以才有了下面这句话 B.prototype.constructor = B;

重新指向一下 不知道说的够不够清楚

prototype 是JS里的原型
B.prototype = new A();的意思就是,将A是B的原型.也就是一个赋值语句.
B.prototype.constructor = B;是原型继承构造函数原型属性引用

http://sanshi.me/articles/JavaScript-Garden-CN/html/index.html#prototype

B.prototype = new A();

设置B的prototype属性为A的实例对象

B.prototype.constructor = B;// 修正B.prototype.constructor为B本身