谈到面向对象,不得不说一下他的继承,这也是对象三大特征之一
我们常说面向对象是初级前端和中级前端的分水岭,如何熟练的掌握面向对象,称为中级前端呢?
接下来就是重要的一环了: 6大继承
克隆对象:
var obj={
name:"zhang"
}
var obj2=obj 这种写法不是对象克隆(只是把obj的内存地址赋值给obj2)
克隆写法(通过for in 克隆 (有一大特性:不管是公有的还是私有的,都会克隆成私有的))
案例:
var obj={
name:"zhang",
age:20
}
var obj2={}
for(var key in obj){
obj2[key]=obj[key]
}
console.log(obj2)
通过这种方法就能得到obj的所有属性了;
除此之外,js也提供了一个克隆的方法 :Object.create()
案例:
var obj={
name:"zhang",
age:20
}
var obj2=Object.create(obj) 将obj的所有属性克隆到obj2的原型上
console.log(obj2)
如果想obj2添加私有属性:var obj2=Object.create(obj,{name:{value:"lisi"}})
这种写法得到最后的结果
obj2=name:"lisi"
__proto__:{name:"zhang",age:20}
对象的继承:
1.原型的继承:将父类的私有和公有的继承在子类的原型上,成为子类的公有的;
案例:
function A(){
this.name="zhang"
}
A.prototype.s=10;
function B(){
this.age=20;
}
B.prototype=new A;
var b=new B;
console.log(b)
2.call继承:将父类的私有的继承为子类的私有的
案例:
function A(){
this.name="zhang"
}
A.prototype.s=20;
function B(){
this.age=10;
A.call(this)
}
B.prototype.y=11;
var b=new B;
console.log(b)
3.冒充对象的继承:将父类的私有的和公有的都继承为私有的;
案例:
function A(){
this.name="zhang"
}
A.prototype.s=10;
function B(){
this.age=40;
var a=new A;
for(var key in a){
this[key]=a[key]
}
a=null;
}
B.prototype.y=20
var b=new B;
console.log(b)
4.混合继承:父类私有的继承为子类私有的,父类私有的,公有的继承为子类公有的;
案例:
function A(){
this.name="zhang"
}
A.prototype.s=41;
function B(){
this.age=10;
A.call(this)
}
B.prototype=new A;
var b=new B;
console.log(b)
5.组合继承 :父类私有的继承为子类私有的,父类公有的继承为子类公有的
案例:
function A(){
this.name="zhang"
}
A.prototype.s=10;
function B(){
this.age=20;
A.call(this)
}
B.prototype=Object.create(A.prototype)
var b=new B;
console.log(b)
6.中间类继承
案例:
function fn(){
arguments.__proto__=Array.prototype
arguments.shift
console.log(arguments)
fn(12,25,98)
argument不是一个数组,没有Array自带的那些方法,现在我们想arguments有array的那些方法,将arguments的原型执行array内置类的原型