澳门威尼斯人appjavascript类式继承新的尝试

2019-08-05 09:00栏目:WRB前端

自家明日做的品味是,怎样更它更像别的的言语一样的施用持续机制,多层承袭和更方面包车型大巴调用父类的布局。
自己愿意达到的职能:

复制代码 代码如下:

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 ); //true
alert( c instanceof B ); //true
alert( c instanceof C ); //true

实例:

js继承

[Ctrl A 全选 注:如需引入外界Js需刷新工夫推行]

自己的extend是这么写的:

复制代码 代码如下:

 
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; 
}

也许你会问,为何不那样写:

复制代码 代码如下:

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.prototype.$supClass = function(){
supClass.apply(this,arguments);
};
subClass.prototype.constructor = subClass;
return subClass;
}

如此看似没十分,唯有一流承袭时会运维的很好,不过,倘若多级承继时,就能够造成死循环,因为:

复制代码 代码如下:

subClass.prototype.$supClass = function(){
supClass.apply(this,arguments);
};

本条点子会被直接覆盖重写掉,而导致死循环。
而本人的做法是,用类的$supClass属性指向它所承袭的父类构造,在prototype中也许有个$supClass方法,这些$supClass第2回必须求在类的构造器中施行,prototype.$supClass在试行时,会经过arguments.callee.caller.$supClass来收获类的$supClass,然后通过apply在this实行。 那样$subClass就能够依赖不一致的来,来获得类的父类构造器并实行。

您大概感兴趣的稿子:

  • JavaScript中的类承袭
  • JavaScript 高等篇之闭包、模拟类,承继(五)
  • JS承继--原型链承接和类式承接
  • js类式承继的切实可行落到实处格局
  • JavaScript承袭基础解说(原型链、借用构造函数、混合方式、原型式承袭、寄生式继承、寄生组合式承接)
  • JavaScript设计方式念书之“类式承继”
  • JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,承袭的三种达成格局
  • 浅析JS原型传承与类的承继
  • js类式承接与原型式承袭详解

版权声明:本文由威尼斯人app发布于WRB前端,转载请注明出处:澳门威尼斯人appjavascript类式继承新的尝试