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);
            };
  • 相关阅读:
    .NET Core依赖注入集成Dynamic Proxy
    MediatR-进程内的消息通信框架
    03-EF Core笔记之查询数据
    02-EF Core笔记之保存数据
    01-EF Core笔记之创建模型
    EF Core 基础知识
    CQRS+ES项目解析-Equinox
    CQRS+ES项目解析-Diary.CQRS
    不要让事实妨碍好故事:Facebook精准广告产品与硅谷创业揭秘,4星奇书《混乱的猴子》
    会讲故事的前物理学家万维钢解读、推荐过的书24本,好书一半
  • 原文地址:https://www.cnblogs.com/lihaozhou/p/3965113.html
Copyright © 2011-2022 走看看