继承
原型链实现了继承,但无法传参和共享
function Box(){ //Box()构造函数 this.name = "lee"; } function Desk(){ //Desk()构造函数 this.age = 100; } Desk.prototype = new Box(); //通过原型Desk()继承了Box() Desk.prototype.age = 200;//对应第255行 var desk = new Desk(); alert(desk.age); alert(desk.name); //undefind, 对应第220行 function Table(){ this.level = "cccc"; } Table.prototype = new Desk(); var table = new Table(); alert(table.name);
原型链+构造函数的模式,称为组合继承,解决了传参和共享的问题,常用此方法。
function Box(age){ this.name = ["ll","cc","kk"]; this.age = age; } Box.prototype.run = function(){ return this.name + this.age; } function Desk(age){ Box.call(this,age);//this表示Desk. 对象冒充,给父类传参,解决了传参问题 } Desk.prototype = new Box(); //原型链继承,解决了共享问题 var desk = new Box(120); //alert(desk.age);//20 //alert(desk.name); //llcckk desk.name.push("00"); //alert(desk.name); //llcckk00 alert(desk.run());
对象冒充 解决了传参问题
为了结局引用共享和超类型无法传参的问题,我们采用一种叫借用构造函数的技术,或者成为对象冒充(伪造对象,经典继承)的技术来解决这两种问题。