你的位置:首页 > Java教程

[Java教程]一个小巧的Class方案


(function(){  function Extend(func,proto){    func.prototype.__proto__=proto.prototype;    Object.defineProperty(func.prototype,"proto",{      value: proto.prototype    });  }  function Super(func,method){    if(!method) method='constructor';    return func.prototype.__proto__[method];  }  window.Extend=Extend;  window.Super=Super;})();

在处理super的super时候遇到了死循环:

this.super-->this.proto.constructor(){this.super}-->this.proto.constructor。。。

后来直接用了上面代码中的办法,不想整得太复杂(就是不会。。。)

(function(){  function AAA(name){    this.name=name;  }  function BBB(name){    Super(BBB).call(this,name);  }  Extend(BBB,AAA);  function CCC(name,age){    Super(CCC).call(this,name);    this.age=age;  }  Extend(CCC,BBB);  var c=new CCC('ccc',18);  console.log(c);})();

然后不想污染Function,只能污染window了。。。

话说放在Function里面是不是要好用些?

(function(){  Function.prototype.Extend=function(proto){    this.prototype.__proto__=proto.prototype;  }  Function.prototype.Super=function(method){    if(!method) method='constructor';    return this.prototype.__proto__[method];  }})();(function(){  function AAA(name){    this.name=name;  }  function BBB(name){    BBB.Super().call(this,name);  }  BBB.Extend(AAA);  function CCC(name,age){    CCC.Super().call(this,name);    this.age=age;  }  CCC.Extend(BBB);  var c=new CCC('ccc',18);  console.log(c);})();