问题描述
//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);//这下面两句是什么意思?B.prototype = new A();B.prototype.constructor = 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; 重新指向一下 不知道说的够不够清楚
解决方案二:
http://sanshi.me/articles/JavaScript-Garden-CN/html/index.html#prototypeB.prototype = new A(); 设置B的prototype属性为A的实例对象B.prototype.constructor = B;// 修正B.prototype.constructor为B本身
解决方案三:
prototype 是JS里的原型B.prototype = new A();的意思就是,将A是B的原型.也就是一个赋值语句.B.prototype.constructor = B;是原型继承构造函数原型属性引用