zoukankan      html  css  js  c++  java
  • 完美的js继承

    //完美的js继承 少了类管理器
    Object.extend=function(){
        var fnTest = /_super/;
        //继承父类
        var _super = arguments[0].prototype||this.prototype;
    
        var prototype=Object.create(_super)
    
        //初始化函数ctor
        var _Class=function(){
            if (this.ctor)
                this.ctor.apply(this, arguments);
        }
        _Class.prototype = prototype;
    
        //当前类属性和方法
        var prop = arguments[arguments.length-1];
        for (var name in prop) {
            var isFunc = (typeof prop[name] === "function");
            var override = (typeof _super[name] === "function");
            var hasSuperCall = fnTest.test(prop[name]);
    
            if (isFunc && override && hasSuperCall) {
                prototype[name] = (function (name, fn) {
                    return function () {
                        var tmp = this._super;
                        this._super = _super[name];
                        var ret = fn.apply(this, arguments);
                        this._super = tmp;
                        return ret;
                    };
                })(name, prop[name]);
            } else {
                prototype[name] = prop[name];
            }
        }
    
        //类继承
        _Class.extend=Object.extend;
        //类扩展
        _Class.expand = function (prop) {
            for (var name in prop) {
                prototype[name] = prop[name];
            }
        };
        return _Class
    
    }
    var pointArray=Object.extend(Array,{
        ctor:function(){
            Array.prototype.push.apply(this,arguments)
        }
    
    })
    console.log(pointArray)
    var arr=new pointArray(2,5)
    
    console.log(arr)
    console.log(arr.push(4))
    

      

  • 相关阅读:
    工厂增强
    面试题
    SpringBean生命周期及作用域
    字符串
    带参数方法实例
    带参数方法
    人机猜拳
    类的无参方法
    类和对象实例2
    类和对象实例1
  • 原文地址:https://www.cnblogs.com/caoke/p/5006848.html
Copyright © 2011-2022 走看看