zoukankan      html  css  js  c++  java
  • JS类的实现

    1个月前写过最简单的那种,再重新实现一遍

    //类的实现,一个参数创建类,两个参数继承类
    var Klass = function (parent, options) {
        var
            hasOwn = Object.prototype.hasOwnProperty,
            isFunc = function(obj) {
                return typeof obj === 'function';
            },
        //中间函数避免执行父类构造函数
            Func = function () {
            },//返回的子类
            Child = function () {
                isFunc(this.initialize) && this.initialize.apply(this, arguments);
            },
            k;
    
        //参数check
        if (arguments.length === 0 || arguments.length > 2) throw new Error("只接受1个或2个参数");
        //只传入一个参数对象
        if (!isFunc(parent)) {
            options = parent;
            parent = null;
        }
        //继承父类
        if (parent) {
            Func.prototype = parent.prototype;
            Child.prototype = new Func();
            Child.superproto = parent.prototype;
            Child.prototype.constructor = Child;
        }
        //添加options
        for (k in options) {
            if(hasOwn.call(options, k)) Child.prototype[k] = options[k];
        }
    
        return Child;
    };
    
    //测试
    var Person = Klass({
            initialize: function(opt) {
                this.name = 'unnamed';
                $.extend(this, opt);
            },
            getName: function () {
                return this.name;
            },
            say: function() {
                console.log("hello world");
            }
        }),
        Player = Klass(Person, {
            play: function () {
                console.log("i'm playing " + this.game);
            }
        }),
    player1
    = new Player({ name: 'bobo', game: 'Dota2' }); player1.play(); // "i'm playing Dota2" player1.say(); // "hello world" console.log(player1.getName()); // "bobo"
  • 相关阅读:
    hdoj 1872 稳定排序
    nyoj 60 谁获得了最高奖学金
    hdoj 2066 一个人的旅行
    nyoj 8 一种排序
    bzoj1798 1
    bzoj4031
    SPOJ-HIGH
    学习笔记::矩阵树定理
    学习笔记::树上莫队
    Strip
  • 原文地址:https://www.cnblogs.com/coiorz/p/4817087.html
Copyright © 2011-2022 走看看