• (1) basic javascript class



    1 version 1

    var Class = function(){
            var klass = function(){
                this.init.apply(this,arguments);
            };
            //init
            klass.prototype.init = function(){};
            return klass;
        };
    
        var Person = new Class();
    
        Person.prototype.init = function(){
            this.name = "Jackey";
        };
    
        Person.prototype.find = function(){
            console.log(this.name);
        };
        
        var person = new Person();
        person.find();


    (1)

    var Person = new Class();


    为了制造出这样的效果,我们要先写一个Class的function,实例化后返回一个function:

    var Class = function(){
            var klass = function(){};
            return klass;
        };

    (2) 给返回function 添加一个程序的入口

    var Class = function(){
            var klass = function(){
                this.init.apply(this,arguments);
            };
            //init
            klass.prototype.init = function(){};
            return klass;
        };

    这就意味着,返回的function原型的init的this指针变量都会被引用到klass里面

    (3)编写类,通过原型去扩展自己的function

     var Person = new Class();
    
        Person.prototype.init = function(){
            this.name = "Jackey";
        };
    
        Person.prototype.find = function(){
            console.log(this.name);
        };
    
        var person = new Person();
        person.find();

     2 version 2

    var Class = function(){
            var klass = function(){
                this.init.apply(this,arguments);
            };
            //init
            klass.prototype.init = function(){};
            klass.fn = klass.prototype;
            klass.fn.parent = klass;
            //add class property
            klass.extend = function(obj){
                var extended = obj.extended;
                for(var i in obj){
                    klass[i] = obj[i];
                }
                if(extended) extended(klass);
            };
            //add prototype property
            klass.include = function(obj){
                var included = obj.included;
                for(var i in obj){
                    klass.fn[i] = obj[i];
                }
                if(included) included(klass);
            };
            return klass;
        };
    
        var Person = new Class();
    
        Person.prototype.init = function(){
            this.name = "Jackey";
        };
    
        Person.prototype.find = function(){
            console.log(this.name);
        };
    
        Person.include({
           get:function(){
               return this.name
           },
            set:function(value){
                this.name = value;
            }
        });
    
        var person = new Person();
        console.log(person.get());//Jackey
        person.set("Jackey Sparrow")
        console.log(person.get());//Jackey Sparrow

    对比上一个版本,这个版本多了一个extend和一个include,分别是添加实例的属性和类的属性

     klass.fn = klass.prototype;
            klass.fn.parent = klass;
            //add class property
            klass.extend = function(obj){
                var extended = obj.extended;
                for(var i in obj){
                    klass[i] = obj[i];
                }
                if(extended) extended(klass);
            };
            //add prototype property
            klass.include = function(obj){
                var included = obj.included;
                for(var i in obj){
                    klass.fn[i] = obj[i];
                }
                if(included) included(klass);
            };
  • 相关阅读:
    动态查询 母表和子表的 一种方法
    js的一些正则 整理 长期更新
    fmt 标签格式化 日期
    一些关于 checkbox的前台 jquery 操作 记录
    jQuery 追加元素的方法如append、prepend、before,after(转)
    (Oracle)DBMS_SYSTEM工具-01[20180510]
    MySQL->元数据[20180510]
    MySQL->复制表[20180509]
    MySQL->索引的维护[20180504]
    MySQL-ALTER TABLE命令学习[20180503]
  • 原文地址:https://www.cnblogs.com/lihaozhou/p/3965113.html
Copyright © 2020-2023  润新知