• node中的对象


    1. class的概念

    定义一个class,属性都是private,方法都是public。

    Hello.js:

    使用class

    index.js:

    2. 单例类

    使用exports而不是module.exports。区别在于Hello导出的是新的Function对象,而single导出的是single.js的初始对象{}。

    属性都是private,方法都是public需要exports接口导出。

    exports.name = name,相当于给接口{}创建动态属性。是无法导出var name的,因为name不是引用类型。

    single.js:

    new single()的话会报错。无论在哪里引用require single,值getName都是一样的。

    index.js:

     

    3. JS方法和变量的总结

    1 对象的方法和属性。可理解为对象原本包含的变量和方法。

    Hello.js

    //模块封装Hello类
    module.exports = Hello;
    
    //Hello类定义
    function Hello(){
        this.age = 1;
    
        this.setAge = function(age){
            this.age = age;
        }
    
        this.getAge = function (){
            return this.age;
        }
    }
    

      

    index.js

    var Hello = require("./Hello.js");
    var hello = new Hello();
    
    //访问age
    console.log(hello.age);       //1
    console.log(hello.getAge());  //1
    
    //修改age
    hello.setAge(2);
    
    //访问修改后的age
    console.log(hello.age);       //2
    console.log(hello.getAge());  //2
    
    //新的实例,age初始值不变
    var hello2 = new Hello();
    console.log(hello2.age);     //1
    

      

      

     2 类方法和变量,可理解为类的静态变量和方法

    Hello.js

    //模块封装Hello类
    module.exports = Hello;
    
    //Hello类定义
    function Hello(){
    
    }
    
    Hello.age = 1;
    
    Hello.getAge = function(){
        return Hello.age;
    }
    

     index.js

    var Hello = require("./Hello.js");
    var hello = new Hello();
    
    //实例无法访问静态变量
    console.log(hello.age);         //undifined
    //console.log(hello.getAge());  //报错
    
    //访问age
    console.log(Hello.age);         //1
    console.log(Hello.getAge());    //1
    
    //修改age
    Hello.age = 2;
    
    //访问修改后age
    console.log(Hello.age);         //2
    console.log(Hello.getAge());    //2

     3 原型变量和方法,可理解为对象原本包含的变量和方法。可用于继承。

    Hello.js

    //模块封装Hello类
    module.exports = Hello;
    
    //Hello类定义
    function Hello(){
    
    }
    
    Hello.prototype.age = 1;
    
    Hello.prototype.getAge = function(){
        return Hello.prototype.age;
    }
    

    index.js

    var Hello = require("./Hello.js");
    var hello = new Hello();
    
    //访问age
    console.log(hello.age);       //1
    console.log(hello.getAge());  //1
    
    //修改age
    hello.age = 2;
    
    //访问修改后的age
    console.log(hello.age);       //2
    console.log(hello.getAge());  //1
    
    //新的实例
    var hello2 = new Hello();
    console.log(hello.age);       //2
    console.log(hello.getAge());  //1
    

      

    4  类外的变量和方法 

     Hello.js

    //模块封装Hello类
    module.exports = Hello;
    
    var age = 1;
    var getAge2 = function(){
        return age;
    }
    
    
    //Hello类定义
    function Hello(){
    
        this.setAge = function(_age){
           age = _age;
        }
    
        this.getAge = function (){
            return age;
        }
    }
    

    index.js

    var Hello = require("./Hello.js");
    var hello = new Hello();
    
    //访问age
    console.log(hello.age);         //undifined
    console.log(hello.getAge());    //1
    
    //无法访问getAge2()
    //console.log(hello.getAge2()); //报错
    //Hello.getAge2();              //报错
    
    //修改age
    hello.setAge(2);
    
    //访问修改后的age
    console.log(hello.age);       //undifined
    console.log(hello.getAge());  //2
    
    //新的实例
    var hello2 = new Hello();
    console.log(hello2.age);       //undifined
    console.log(hello2.getAge());  //2
    

      

    总结:

    1. 无法和java、c#那样有class extends implements private protected public static等来定义变量和方法。

    2. 对于非前端js的使用者,nodejs的对象使用很变扭。

  • 相关阅读:
    LightOJ1031 Easy Game(区间DP)
    POJ1325 Machine Schedule(二分图最小点覆盖集)
    ZOJ1654 Place the Robots(二分图最大匹配)
    LightOJ1025 The Specials Menu(区间DP)
    POJ2288 Islands and Bridges(TSP:状压DP)
    LightOJ1021 Painful Bases(状压DP)
    LightOJ1013 Love Calculator(DP)
    POJ1780 Code(欧拉路径)
    POJ1201 Intervals(差分约束系统)
    ZOJ2770 Burn the Linked Camp(差分约束系统)
  • 原文地址:https://www.cnblogs.com/gamedaybyday/p/6592836.html
Copyright © 2020-2023  润新知