Home > php教程 > PHP开发 > A compact Class solution

A compact Class solution

高洛峰
Release: 2016-11-30 17:01:45
Original
1243 people have browsed it

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

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

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


Related labels:
source:php.cn
Statement of this Website
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
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template