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的对象使用很变扭。