//继承,通过原型链条实现
//被继承的函数叫做超类型(父类、基类)
function Box()
{
<span style="white-space:pre"> </span>this.name = "Lee";
}
//继承的函数叫做子类型(子类、派生类)
function Desk()
{
<span style="white-space:pre"> </span>this.age = 100;
}
function Table()
{
<span style="white-space:pre"> </span>this.level = "AAA";
}
//通过原型链继承
//超类型实例化后的对象实例,赋值给子类型的原型属性
//new Box()会将Box构造里的信息和原型的信息都交给Desk
//Desk的原型。得到的是Box的构造+原型里的信息
Desk.prototype = new Box();
Table.prototype = new Desk();
var box = new Box();
alert(box.constructor);
var table = new Table();
//alert(desk.age);
//alert(desk.name);
alert(table.level)
alert(table.name)
alert(table.age)
//从属关系
function Box()
{
this.name = "Lee";
}
//构造里面有属性,原型里面也有相同的属性
Box.prototype.name = "Jack";
function Desk()
{
this.age = 100;
}
//通过原型链继承
Desk.prototype = new Box();
var desk = new Desk();
var box = new Box();
//就近原则,实例里有就返回,没有就查原型
alert(desk.name);
//子类型从属于自己或者他的超类型
alert(desk instanceof Object) //true
alert(desk instanceof Desk) //true
alert(desk instanceof Box) //true
alert(box instanceof Desk) //false
//使用对象冒充继承(解决传参问题)
function Box(name ,age )
{
this.name = name;
this.age = age;
//this.family = ["哥哥","姐姐","妹妹"]; //引用类型放在构造里不会共享
}
Box.prototype.family = "家庭";
function Desk(name ,age )
{
//this代表Desk本身
//Desk冒充Box
Box.call(this,name,age); //对象冒充,只能继承构造里的信息,原型里继承不了
}
var desk = new Desk("Lee",100);
alert(desk.name);
alert(desk.age);
//该方法原型里的数据继承不过来
alert(desk.family);
function Box(name ,age )
{
this.name = name;
this.age = age;
this.family = ["哥哥","姐姐","妹妹"];
}
//构造函数里的方法,放在构造里,每次实例化都会分配一个内存地址、浪费空间
//所以最好放在原型里,保证多次实例化只有一块地址
Box.prototype.run = function()
{
return this.name + this.age + "运行中...";
}
function Desk(name ,age )
{
Box.call(this,name,age);
}
var desk = new Desk("Lee",100);
//Uncaught TypeError: Object #<Desk> has no method 'run'
alert(desk.run());
//组合模式(原型链+借用构造函数)
function Box(name ,age )
{
this.name = name;
this.age = age;
this.family = ["哥哥","姐姐","妹妹"];
}
//构造函数里的方法,放在构造里,每次实例化都会分配一个内存地址、浪费空间
//所以最好放在原型里,保证多次实例化只有一块地址
Box.prototype.run = function()
{
return this.name + this.age + "运行中...";
}
function Desk(name ,age ) //对象冒充
{
Box.call(this,name,age);
}
Desk.prototype = new Box(); //原型链继承
var desk = new Desk("Lee",100);
//Uncaught TypeError: Object #<Desk> has no method 'run'
alert(desk.run());