cocos js类的继承测试

/*
  Simple JavaScript Inheritance
 * By John Resig https://johnresig.com/
 * MIT Licensed.

// Inspired by base2 and Prototype
(function(){
    var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;

    // The base Class implementation (does nothing)
    /*this.Class = function(){};

    // Create a new Class that inherits from this class
    Class.extend = function(prop) {
        var _super = this.prototype;

        // Instantiate a base class (but only create the instance,
        // don't run the init constructor)
        initializing = true;
        var prototype = new this();
        initializing = false;

        // Copy the properties over onto the new prototype
        for (var name in prop) {
            // Check if we're overwriting an existing function
            prototype[name] = typeof prop[name] == "function" &&
            typeof _super[name] == "function" && fnTest.test(prop[name]) ?
                (function(name, fn){
                    return function() {
                        var tmp = this._super;

                        // Add a new ._super() method that is the same method
                        // but on the super-class
                        this._super = _super[name];

                        // The method only need to be bound temporarily, so we
                        // remove it when we're done executing
                        var ret = fn.apply(this, arguments);
                        this._super = tmp;

                        return ret;
                    };
                })(name, prop[name]) :
                prop[name];
        }

        // The dummy class constructor
        function Class() {
            // All construction is actually done in the init method
            if ( !initializing && this.init )
                this.init.apply(this, arguments);
        }

        // Populate our constructed prototype object
        Class.prototype = prototype;

        // Enforce the constructor to be what we expect
        Class.prototype.constructor = Class;

        // And make this class extendable
        Class.extend = arguments.callee;

        return Class;
    };
})();
*/

var glTest = {};
(
    function(){
        var initializing = false,fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;

        glTest.Class = function(){console.log("glTest Class");};

        glTest.Class.extend = function(prop){
            var _super = this.prototype;
            console.log("_super:",_super);
            initializing = true;
            var prototype = new this();
            console.log("this:",this);
            console.log("prototype:",prototype);
            initializing = false;

            for(var name in prop){
                prototype[name] = typeof prop[name] === "function" &&
                typeof _super[name] == "function" && fnTest.test(prop[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]) : prop[name];
            }

            // The dummy class constructor
            function Class() {
                // All construction is actually done in the init method
                if ( !initializing && this.init )
                    this.init.apply(this, arguments);
            }

            // Populate our constructed prototype object
            Class.prototype = prototype;

            // Enforce the constructor to be what we expect
            Class.prototype.constructor = Class;

            // And make this class extendable
            Class.extend = arguments.callee;

            return Class;
        }
    }
)();

var Person = glTest.Class.extend({
    init: function(isDancing){
        this.dancing = isDancing;
    },
    dance: function(){
        console.log(this.dancing);
        return this.dancing;
    }
});


var Ninja = Person.extend({
    init: function(){
        this._super( false );
    },
    dance: function(){
        // Call the inherited version of dance()
        return this._super();
    },
    swingSword: function(){
        return true;
    }
});


var c = function(){
    console.log("this object:",this);
}

c.tend = function(){
    console.log("this object:",this);
};

c();
c.tend();
//var p = new Person(true);
///p.dance(); // => true

//var n = new Ninja();
//n.dance(); // => false
//n.swingSword(); // => true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值