js的继承 主要是继承两个部分
一个是写在函数体内 通过 this 定义的方法和属性
代码
function parent(){
this.name = 1;
this.fuck = function(){
}
}
继承这种方法需要在初始化的时候进行继承,我看许多其他的例子 是通过实例化之后 进行处理,我觉得这样写 就没有继承的样子了,而且子类无法进行属性和方法重写
所以我换了个方式
首先定义一个方法
function getParent(instance,parent,arg){
instance.extend = parent;
instance.extend.apply(instance,arg);//传递参数
instance.extend = null;
delete instance.extend;
}
然后每次定义一个新的类,只需要在function体内的第一行,调用这个方法即可
完整的代码如下
function getParent(instance,parent,arg){
instance.extend = parent;
instance.extend.apply(instance,arg);//传递参数
instance.extend = null;
delete instance.extend;
}
function Parent(){
this.name = '老王';
this.daren = function(){
console.log('我是'+this.name+',我要打人了');
}
}
function Child(name){
getParent(this,Parent,arguments);
this.name = name;
}
var laoWang = new Parent();
laoWang.daren();
var xiaoMing = new Child('小明');
xiaoMing.daren();
var xiaoMing = new Child('小明的妹妹');
xiaoMing.daren();
好上述的方法继承完毕,咱们还需要继承prototype中的方法,这个好办,咱们直接给Function写个扩展
Function.prototype.extend = function(parent){
this.prototype = parent.prototype;
};
function getParent(instance,parent,arg){
instance.extend = parent;
instance.extend.apply(instance,arg);//传递参数
instance.extend = null;
delete instance.extend;
}
Function.prototype.extend = function(parent){
this.prototype = parent.prototype;
};
function Parent(){
this.name = '老王';
this.daren = function(){
console.log('我是'+this.name+',我要打人了');
}
}
Parent.prototype = {
chuanmen:function(){
console.log('我是'+this.name+',我去串门了');
}
};
function Child(name){
getParent(this,Parent,arguments);
this.name = name;
}
Child.extend(Parent);
var laoWang = new Parent();
laoWang.daren();
laoWang.chuanmen();
var xiaoMing = new Child('小明');
xiaoMing.daren();
laoWang.chuanmen();
var xiaoMing = new Child('小明的妹妹');
xiaoMing.daren();
laoWang.chuanmen();
大家去试试看吧