一、Node.js "实体类" 的定义 //定义类Person 有参构造方法 function Person(name, sex, age, addr, salary) { this.name = name; this.sex = sex; this.age = age; this.addr = addr; this.salary = salary; } 二、定义set 方法以设置 实体类Person 的属性值 //set 方法 Person.prototype.setName=function (name) { this.name=name; }; Person.prototype.setSex=function (sex) { this.sex=sex; }; Person.prototype.setAge=function (age) { this.age=age; }; Person.prototype.setAddr=function (addr) { this.addr=addr; console.log("Person setAddr"); }; Person.prototype.setSalary=function (salary) { this.salary=salary; }; 三、定义get 方法以获取 实体类Person 的属性值 //get 方法 Person.prototype.getName=function(){ return this.name; }; Person.prototype.getSex=function(){ return this.sex; }; Person.prototype.getAge=function(){ return this.age; }; Person.prototype.getAddr=function(){ return this.addr; }; Person.prototype.getSalary=function(){ return this.salary; }; 四、构造Person实例对象 //使用new 全参构造方法 获取实例对象 let Kirito=new Person( "桐人", "男", 18, "SAO", 999999999); //控制台打印Person实例 console.log(Kirito); console.log("-------------------------------------------------------" + "\n\n"); //使用get方法 获取Person属性值 console.log(Kirito.getName()); console.log(Kirito.getSex()); console.log(Kirito.getAge()); console.log(Kirito.getAddr()); console.log(Kirito.getSalary()); console.log("-------------------------------------------------------" + "\n\n"); //使用new 无参构造方法 获取实例对象 let Ausua = new Person(); //使用set方法 设置Person属性值 Ausua.setName("亚丝娜"); Ausua.setSex("女"); Ausua.setAge(18); Ausua.setAddr("SAO"); Ausua.setSalary(999999999); //控制台打印Person实例 console.log(Ausua); console.log("-------------------------------------------------------" + "\n\n"); 五、Node.js 实例化的函数调用 工作流程
Node.js 实例化的函数调用 工作流程:
let person =new Person();流程
每一个函数对象都有自己的prototype对象 : function Person() 有自己的prototype对象
这个prototype对象是一个字典表 可以定义自己的方法 : Person.prototype.set/get方法的定义
把这个函数对象看做一个类 使用new 来创建类的实例
这个实例产生时 key--->proto
将函数的prototype 浅复制 至实例中 作为value
这样就建立了__proto__ : prototype 关联关系
实例创建完成后 绑定到这个函数的this里面
在后续的函数调用过程中 这个实例通过this进行传递
this传递的实例在函数的方法体中进行一系列初始化等运算
创建完实例,通过实例进行调用函数,其顺序是:先找自己方法体中的字典表 ,在去__proto__里面找
实现在类中定义好了key---value与函数方法后 再new出来的实例对象也具备相同的方法
我们可以通过调用这些函数方法来进行对类对象、属性的一系列操作
总结与思考:
因为Node.js中没有Java等高级语言中class类的概念 故出现了__proto__ 与 prototype
与java相比 其两者的关系类似于继承: