原型式继承
原型式继承,就是一定一个函数,该函数中创建一个临时性的构造函数,将作为参数,传入的对象作为这个构造函数的原型,最后返回这个构造函数的实例对象
/*定义函数:用于实现对象之间的继承
参数:
obj:表示继承关系中的父级对象
prop:对象格式,表示继承关系中的子级对象的属性和方法
*/
function fn(obj,porp){
//定义一个临时的构造函数
function Fun(){
//遍历对象的属性和方法
for(var attrName in porp){
this[attrName]=porp[attrName];
}
}
//将函数的参数作为构造函数的原型
Fun.prototype=obj;
//将构造函数创建的对象进行返回
return new Fun();
}
var obj={
name:'前端'
}
//调用函数
var result=fn(obj,{
age:20,
sayMe:function(){
console.log('this is function');
}
});
console.log(result.age);
result.sayMe();
利用Object.create()方法实现继承
var obj={
name:'前端'
}
var newObj=object.create(obj,{
age:{
value:20
},
sayMe:{
value:function(){
console.log('this is function');
}
}
});
console.log(newObj.age);
newObj.sayMe();
借助构造函数
无论是原型链还是原型式继承,都具有相同的问题。想要解决这样的问题的话,可以借助构造函数(也可以叫做伪造对象或经典继承)。
这种方式实现非常简单,就是在子对象的构造函数中调用父对象的构造函数。具体可以通过调用apply()和call()方法实现。
apply()和call()方法都允许传递指定某个对象的this。对于继承来讲,可以实现在子对象的构造函数中调用父对象的构造函数时,将子对象的this和父对象的this绑定在一起
//定义父级对象的构造函数
function Parent(){
this.parent='parent';
}
//定义子级对象的构造函数
function child(){
//调用父级对象的构造函数:使用apply()或call()方法
Parent.call(this);
this.child='child';
}
//创建子级对象
var child=new Child();
console.log(child);
组合方式继承
组合继承,也叫做伪经典继承,指的是将原型链或原型式继承和借助构造函数的技术组合在一起,发挥二者长处的一种继承方式
具体实现的思路就是:
- 使用原型链或原型式继承实现对原型的属性和方法的继承。
- 通过借助构造函数实现对实例对象的属性的继承
这样,既通过在原型上定义方法实现了函数的重用,又可以保证每个对象都有自己的专有属性
function Parent(){
//构造函数的自有属性
this.name='前端';
}
//构造函数的原型属性
Parent.prototype.age=20;
function Child(){
//继承父级构造函数中的自有属性
Parent.call(this);
this.job='IT';
}
//继承父级构造函数中的原型属性
Child.prototype=Parent.prototype;
var child=new Child();
console.log(child.job);
console.log(child.age);
console.log(child.name);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。