zoukankan      html  css  js  c++  java
  • (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);
            };
  • 相关阅读:
    php中的list()用法中要注意的地方
    怎么让小白理解intel处理器(CPU)的分类
    CPU的历史
    【主板上各种接口和附属部件科普】
    NVMe SSD是什么?
    带你认识SATA、mSATA 、PCIe和M.2四种接口
    那些长短不一的PCI-E插槽都有什么不一样?
    ceph 指定OSD创建pool
    ceph cache pool配置
    搭建ceph集群(单节点)
  • 原文地址:https://www.cnblogs.com/lihaozhou/p/3965113.html
Copyright © 2011-2022 走看看