什么是继承?
人类活动中 继承就是子承父业
在强类型编程语言中 子类继承父类 子类具有父类的功能
但是js是弱类型语言 不存在自定义类型 那么
js中的继承是什么呢?
别的对象有什么功能 我也能拿过来 自己也拥有 就是继承
实现继承的几种方式:
被继承的对象
var obj={
name:"小白白",
age:16,
show:function () {
console.log("请不要秀");
},
eat:function () {
console.log("慢点吃");
}
}
1.对象混入式继承:
for in遍历被继承的对象 绑定给新对象
var per={}
for(var k in obj){
per[k]=obj[k];
}
// console.log(per);
// console.log(per===obj);//false
console.log(per.name);
per.show();
2.对象默认继承原型
对象默认会继承当前对象关联的那个原型里面的属性跟方法
function Person() {
}
Person.prototype.show=function () {
console.log("原型的show");
}
var per=new Person();
per.show();
3.原型替换继承
直接把当前构造函数对应的原型替换成要想继承的对象
function Person() {
}
// 把要继承的对象替换为当前构造函数的原型
Person.prototype=obj;
/!*var per=new Person();
console.log(per.name);
per.show();
per.eat();*!/
4.原型混入式继承
把要继承的对象 通过 for in遍历 所有属性跟方法绑定给当前
原型 那么当前原型所关联的所有对象都可以调用被继承的对象
里面的属性跟方法
function Person() {
}
for(var k in obj){
Person.prototype[k]=obj[k];
}
var per=new Person();
console.log(per.name);
per.show();
per.eat();
5.<<JavaScript语言精粹>> 这本书提供了一种方式
function extend(o){
function F() {
}
F.prototype=o;
return new F();
}
var newObj=extend(obj);
// console.log(newObj);
console.log(newObj.name);
console.log(newObj.age);
newObj.show();
6.ECMAScript官方推出的 Object.create方法
var newObj= Object.create(obj);
// console.log(newObj);
console.log(newObj.name);
newObj.show();
7.自己封装兼容性写法
function create(o) {
if(Object.create){
return Object.create(o);
}else{
function F(){
}
F.prototype=o;
// 因为F这个构造函数纯是为了实现原型替换临时创建的 所有原型的构造函数被替换也无所谓
/* F.prototype.constructor=F;*/
return new F();
}
}
//验证封装
var newObj= create(obj)
console.log(newObj.name);
console.log(newObj.age);
newObj.show();
newObj.eat();