混入式继承
一个对象拷贝另外一个对象的所有成员
//遍历
for(var k in obj1){
obj1[k]=obj2[k]
}
Object.prototype.color='pink'
//for in 循环会把原型链上能找到的属性全部遍历
//hasOwnProperty判断属性是否是对象自身的属性
for(var k in obj1){
if(obj1.hasOwnProperty(k){
this[k]=obj1[k]
}
obj1[k]=obj2[k]
}
复制代码
原型链继承
一个对象可以访问构造函数原型上的属性和方法,如果想要让一个对象增加某些属性和方法,只要把属性和方法添加到原型对象中
//原型替换,会造成constructor属性丢失的问题,手动添加即可
Person.prototype={
constructor:Person,
age:18,
name:'ls',
render:function(){
console.log('render')
}
}
复制代码
混入式+原型链继承
给构造函数的原型添加混入式方法,
Person.prototype.extend(obj){
for(var k in obj1){
if(obj1.hasOwnProperty(k){
this[k]=obj1[k]
}
obj1[k]=obj2[k]
}
}
var p = new Person()
//传对象调用,p上就可以继承多个对象的属性和方法了
复制代码
经典继承
语法: var newobj = Object.create(obj)
作用:创建并返回一个新对象,新对象的原型就是参数obj
var o={
sex:'man',
age:18
}
var o2=Object.create(o)
console.log(o2.__proto__==o)
复制代码
借用构造函数继承
function Mine(name,age,sex){
this.name=name
this.age=age
this.sex=sex
}
function Her(height){
Mine.call(this,name,age,sex)
this.height=height
}复制代码