这个对象,不是那个对象,第三哦!
对象之间会存在继承,所以,来说一下他们之间存在的三种三种继承方式:
1、冒用继承
1 //创建了孙悟空构造函数
2 function sun(change,weapon,gf){
3 this.change = change;
4 this.weapon = weapon;
5 this.gf = gf;
6 this.bianshen = function(){
7 alert(吃俺老孙一棒);
8 }
9 }
10
11 //给原型上添加一个方法
12 /*sun.prototype.bianshen = function(){
13 alert(吃俺老孙一棒);
14 }*/
15
16 //创建猪八戒构造函数
17 function zhubajie(name){//name是猪八戒自己单独有的属性
18 this.name = name;
19 //创建一个属性,属性值是sun构造函数
20 this.sun = sun;
21 this.sun(仙桃,金箍棒,紫霞仙子);
22 delete this.sun;//删除掉这个属性
23 }
24
25 var zbj = new zhubajie(猪八戒);
26
27
28 zbj.bianshen();//方法可以使用
29 alert(zbj.weapon);
30
31
32 //zbj 和sun 不是同一类型的
33 alert(zbj instanceof sun); //false
这就是第一种继承方式。
【注意】冒用继承缺点:不能使用原型上的方法和属性 优点:可以传递参数;
2、原型继承
1 function dan(car,money,home){
2 this.car = car;
3 this.money = money;
4 this.home = home;
5 }
6
7 //发方法声明在原型对象上
8 dan.prototype.shoping = function (){
9 alert(买买买);
10 }
11 dan.prototype.money = 5亿;
12
13 //这个实例化对象是dan的儿子,可以使用dan的属性和方法
14 var son = new dan(劳斯莱斯幻影,10亿,四合院);
15
16
17 //创建一个乞丐构造函数
18 function s(name){
19 this.name = name;
20 }
21
22 //让乞丐继承富豪的属性和方法
23 //把乞丐的构造函数原型修改成干爹的原型,这样,乞丐实例化对象就可以使用干爹的属性和方法。(两种方法)
24 // s.prototype = dan.prototype;
25 s.prototype = new dan();
26
27 //把s的原型对象constructor指针指回自己,否则会出问题
28 s.prototype.constructor = s;
29 var s = new s(苏乞儿);
30 s.shoping();
31 alert(s.money);
32
33 //判断s的爸爸是不是 dan
34 alert(s instanceof dan);//true s 和 dan不是一个东西
这种继承方式就是将新建的父类对象赋给子类构造函数的原型。
【注意】原型链继承缺点:不能传递参数 优点:可以使用原型 上的方法 ;
3、混合继承
1 function person(name,id,sex){
2 this.name = name;
3 this.id = id;
4 this.sex = sex;
5 this.think = function(ss){
6 alert(ss);
7 }
8 }
9
10 person.prototype.eat = function(){
11 alert(呵呵);
12 }
13
14
15
16 function xm(name,id,sex,clas){
17 this.clas = clas;
18 //call方法是用来继承用的。你想继承那个对性的属性,就要把属性传递进来;
19 // person.call(this,name,id,sex);
20
21 //apply和call功能相同;
22 //区别 call方法 参数要一个一个传, apply方法可以传参数数组
23 //优先选择apply方法使用
24 person.apply(this,arguments);
25 }
26
27 //原型链继承 + call/apply 叫混合继承
28 xm.prototype = new person();
29 xm.prototype.constructor = xm;
30
31
32 var xiaoming = new xm(小明,12312112112332,男,一年级二班);
33 alert(xiaoming.name);//打印小明名字属性
34 xiaoming.think(坎坎坷坷);
35
36 //现在有一个需要,让小明可以使用person对象原型上的方法
37 xiaoming.eat();
第三种方式就是 冒用继承 + 原型继承 ,既能继承父类的原型,完成复用,又能向父类传递参数。
javascript所有的内容就到这里了,希望可以帮到大家!!!!!!
以上就是javascript对象之间存在的三种继承方式的详细内容。