1. 原型链继承
child.prototype = new parent();
1 function parent (name, age) { 2 this.name = name; 3 this.age = age; 4 } 5 parent.prototype.say = function(){ 6 console.log('hello, my name is ' + this.name); 7 }; 8 function child() { 9 }10 child.prototype = new parent('pursue');11 var child1 = new child();12 child1.say(); //hello, my name is pursue13 var child2 = new child();14 console.log(child1.say === child2.say);//true15 console.log(child1.name === child2.name);//true
2. call(thisobj, param1, param2,...)
1 function parent(username){ 2 this.username = username; 3 this.hello = function(){ 4 alert(this.username); 5 } 6 } 7 function child(username,password){ 8 parent.call(this,username); 9 this.password = password;10 this.world = function(){11 alert(this.password);12 }13 }14 var parent = new parent(zhangsan);15 var child = new child(lisi,123456);16 parent.hello();17 child.hello();18 child.world();
3. apply(thisobj, [param1,param2,...])
1 function parent(username){ 2 this.username = username; 3 this.hello = function(){ 4 alert(this.username); 5 } 6 } 7 function child(username,password){ 8 parent.apply(this,new array(username)); 9 this.password = password;10 this.world = function(){11 alert(this.password);12 }13 }14 var parent = new parent(zhangsan);15 var child = new child(lisi,123456);16 parent.hello();17 child.hello();18 child.world();
4. 组合继承(call+原型链 / apply+原型链)
1 function parent(hello){ 2 this.hello = hello; 3 } 4 parent.prototype.sayhello = function(){ 5 alert(this.hello); 6 } 7 function child(hello,world){ 8 parent.call(this,hello);//利用 call 方法 将父类的属性继承过来 9 //parent.apply(this,new array(hello));//利用 apply 方法 将父类的属性继承过来10 this.world = world;//新增一些属性11 }12 child.prototype = new parent();//将父类的方法继承过来13 child.prototype.sayworld = function(){//新增一些方法14 alert(this.world);15 }16 var c = new child(zhangsan,lisi);17 c.sayhello();18 c.sayworld();
5.寄生组合继承,与4相似,只是将原型链换做了object.create(parent.prototype)
1 function parent(hello){ 2 this.hello = hello; 3 } 4 parent.prototype.sayhello = function(){ 5 alert(this.hello); 6 } 7 function child(hello,world){ 8 parent.call(this,hello);//利用 call 方法 将父类的属性继承过来 9 //parent.apply(this,new array(hello));//利用 apply 方法 将父类的属性继承过来10 this.world = world;//新增一些属性11 }12 child.prototype = object.create(parent.prototype);//将父类的方法继承过来13 child.prototype.sayworld = function(){//新增一些方法14 alert(this.world);15 }16 var c = new child(zhangsan,lisi);17 c.sayhello();18 c.sayworld();
以上就是js中的继承方式有哪些?的详细内容。