自定义继承
何时:今后只要觉得默认的父对象不好用时,可换父对象
如何:3种
1.仅修改一个子对象的父对象
obj._proto_=father
问题:_proto_是内部属性,有些浏览器禁用
解决:获取:Object.getPrototypeof(obj)
修改:Object.setPrototypeof(child,father)
2.修改所有子对象的父对象,其实就是改构造函数的原型对象
构造函数.prototype=father
时机:在创建子对象之前就要更换
3.两种类型间的继承
何时:如果多个类型间,包含部分相同的属性结构或者方法定义时,都要在抽象出一个父对象
如何:2步
1.抽象父类型
构造函数:相同部分的属性定义
原型对象:相同的方法定义
2.让子类型继承父类型
让子类型的原型对象继承父类型的原型对象
在子类型构造函数中借用父类型的构造函数
问题:不能直接调用父类型的构造函数,因为一个函数不用new和.调用,this默认指window,导致父类型构造函数的属性流落到全局
解决:call:调用函数并临时替换函数中的this为任何想要的对象
何时:只要函数调用时,this不是想要的就用call
如何:fun.call(obj);将fun中的this临时替换为obj
比如:function child(){
//this->new->正确的
father.call(this,参数...)用child中正确的this顶替father中默认不想要的this
}
var child =new child();