[DBW]一个小巧的Class方案

Posted 未将对象引用设置到对象的实例

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[DBW]一个小巧的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);
})();
复制代码

以上是关于[DBW]一个小巧的Class方案的主要内容,如果未能解决你的问题,请参考以下文章

[DBW]js获取当前时间(昨天今天明天)

Notepad++编辑器——Verilog代码片段直接编译

dB、dBm、dBW与W的换算及含义

[DBW]格式化时间

在西门子plc中,DBD20 DBW20 DBB20 DBX20.有什

解决方案电影标题中缺少代码的片段,完成挑战更多[关闭]