[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本身