(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; })();
Bei der Verarbeitung des super:
this.super-->this.proto.constructor(){this.super}-->this.proto ist eine Endlosschleife aufgetreten . . .
Später habe ich die Methode im obigen Code direkt verwendet, ich wollte es nicht zu kompliziert machen (ich wusste es einfach nicht...)
(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); })();
Dann habe ich Ich wollte die Funktion nicht verschmutzen, daher konnte ich nur das Fenster verschmutzen. . .
Wäre es einfacher, es in eine Funktion einzufügen?
(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); })();