JavaScript-js继承模式

JavaScript-js继承模式

浮生未歇 发布于 2017-08-19 字数 902 浏览 1134 回复 1
function A(){
alert('a');
}
function B(){
this.$supClass();
alert('b');
}
extend(B,A);
function C(){
this.$supClass();
alert('c');
}
extend(C,B);
var c = new C();
alert( c instanceof A );
alert( c instanceof B );
alert( c instanceof C );

function extend(subClass,supClass){
var fun = function(){},
prototype = subClass.prototype;
fun.prototype = supClass.prototype;
subClass.prototype = new fun();
for(var i in prototype){
subClass.prototype[i] = prototype[i];
}
subClass.$supClass = supClass;
subClass.prototype.$supClass = function(){
var supClass = arguments.callee.caller.$supClass;
if(typeof supClass == 'function'){
supClass.apply(this,arguments);
this.$supClass = supClass;
}
};
subClass.prototype.constructor = subClass;
return subClass;
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想挽留 2017-09-20 1 楼

是第一个extends的意思吗?

 function extend(subClass,supClass){
var fun = function(){};

//存储subClass原来的prototype。
prototype = subClass.prototype;

//定义了fun的原型。
fun.prototype = supClass.prototype;

//将subClass的原型指向fun,意思是继承fun,而fun的原型是supClass.
subClass.prototype = new fun();

for(var i in prototype){
//重新设置subClass原先的原型对象。
subClass.prototype[i] = prototype[i];
}

//保存临时变量,这里是将supClass保存到subClass作为静态属性。
subClass.$supClass = supClass;

//定义$supClass方法,调用父类的构造函数。
subClass.prototype.$supClass = function(){
//获取之前保存的$supClass变量,其实就是supClass函数
var supClass = arguments.callee.caller.$supClass;

//判断是函数才执行
if(typeof supClass == 'function'){
//执行父类方法(即指构造函数)
supClass.apply(this,arguments);
//保存临时变量,这句实际上是可以删除掉的。
this.$supClass = supClass;
}
};
//指定constructor
subClass.prototype.constructor = subClass;
return subClass;
}

而第二种extends方法,与第一种方法的区别就是下面这句:

 subClass.prototype.$supClass = function(){
//supClass变量没有保存临时变量,这里就会一直引用最后赋值的变量B,会导致死循环出现。
supClass.apply(this,arguments);
};