Home  >  Article  >  php教程  >  A compact Class solution

A compact Class solution

高洛峰
高洛峰Original
2016-11-30 17:01:451218browse

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

Encountered an infinite loop when processing super's super:

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

Later, I directly used the method in the above code. I didn’t want to make it too complicated (I just didn’t know...)

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

Then I didn’t want to pollute the Function, so I could only pollute the window. . .

Would it be easier to put it inside a 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);
})();


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn