javascript继承的实现方式

继承的实现方式

混入式继承(mix-in)

1
2
3
4
5
var obj = {};
var obj1 = {name:"adsf",age:18};
for(var k in obj1){
obj[k] = obj1[k];
}

原型继承

1.使用混入的方式为原型对象添加成员、

1
2
3
4
5
6
var human = {name:"",age:18}
function Person(){};
for(var k in human){
Person.prototype[k] = human[k];
}

2.直接修改原型对象

1
2
3
function Person(){}
Person.prototype.name = "";
Person.prototype.age = 18;

3.替换原型对象

1
2
3
var human = {name:"",age:18}
function Person(){};
Person.prototype = human;

经典继承

1
2
3
var obj = Object.create(obj1);
//创建出来一个新的对象obj继承自obj1
//原理就是把obj1设置为obj的原型

经典继承的兼容性问题

1
2
3
4
5
6
7
8
9
10
11
function myCreate(obj){
//判断浏览器有没有Object.create方法
if(Object.create){
//如果有,直接调用
return Object.create(obj);
}else{
function F(){}
F.prototype = obj;
return new F();
}
}
为什么不能修改原生对象?
因为原生对象是公用的,在多人开发的时候,可能会出现冲突,你修改了,他也修改了,谁的生效呢?