Node.js new 、 prototype 与 __proto__

266次阅读

共计 2457 个字符,预计需要花费 7 分钟才能阅读完成。

一、构造一个 Person 对象(相当于 Java 中的有参构造函数)
function person(name, sex, age, addr, salary) {
this.name = name;
this.sex = sex;
this.age = age;
this.addr = addr;
this.salary = salary;
}
二、对象实例隐式传递 this 指针
person.prototype.func_pro=function () {
console.log(this);
};
let Sakura =new person(“Sakura”,” 女 ”,16,”FateStayNight”,10000000000);
let Illyasviel= new person(“Illyasviel “,” 女 ”,14,”FateStayNight”,9999999999);
Sakura.func_pro();
Illyasviel.func_pro();
console.log(“——————————————————-” + “\n\n”);
三、new 与 prototype
1、总结:
console.log(“new 与 prototype”);
//1、let variable ={};
//2、nodejs 中每个对象都有一个__proto__属性
// 建立两个对象之间的关联:
// 一个对象可以使用__proto__关联另外一个对象
// __proto__(对象的内部原型的引用): prototype(对象的原型) 浅拷贝
// __proto__与 prototype 指向同一个对象的引用
//3、对象实例作为 this 指针的指向 传递给后面的函数
//4、调用这个函数
2、可以通过 prototype.key=value 来扩充对象 Elf
function Elf(name) {
this.name =name;
console.log(“Elf\t”+name);
}
console.log(“ 可以通过 prototype.key=value 来扩充对象 Elf”);
Elf.prototype.love=function () {
console.log(“%s love ‘DATE A LIVE!'”, this.name);
};

let Yuzuru = new Elf(“Yuzuru”);
let Kaguya = new Elf(“Kaguya”);

Yuzuru.love();
Kaguya.love();

console.log(“——————————————————-” + “\n\n”);
3、实例.__proto__ 与 方法.prototype 指向 同一个对象的引用
console.log(“ 实例.__proto__ 与 方法.prototype 指向 同一个对象的引用 ”);
console.log(Yuzuru.__proto__);
console.log(Elf.prototype);

console.log(“——————————————————-” + “\n\n”);

let func_data =function(){
console.log(“func_data”);
};

func_data.prototype.func_test=function(){
console.log(“func_test”,this);
};// 实例.__proto__ 与 方法.prototype 指向 同一个对象的引用
console.log(“ 实例.__proto__ 与 方法.prototype 指向 同一个对象的引用 ”);
console.log(Yuzuru.__proto__);
console.log(Elf.prototype);

console.log(“——————————————————-” + “\n\n”);

let func_data =function(){
console.log(“func_data”);
};

func_data.prototype.func_test=function(){
console.log(“func_test”,this);
};
4、实例.__proto__ 与 方法.prototype 分别属于 2 个不同的字典表 {}
console.log(“ 实例.__proto__ 与 方法.prototype 指向 分别属于 2 个不同的字典表 {}”);
let data =new func_data();
data.name=”Innocence”;
data.__proto__.func_test();
data.func_test();

console.log(“——————————————————-” + “\n\n”);
5、可以将对象实例看做为一张字典表
// 可以将 data 看做 1 张表
console.log(“ 可以将 data 看做 1 张表 ”);
// 隐式调用 this
data.func_test();
// 显示调用 this 将 data 作为 this 传递给 data._proto_对象里的函数 test_func
data.__proto__.func_test.call(data);

console.log(“——————————————————-” + “\n\n”);
6、调用取值的顺序
data.func_test=function () {
console.log(“new func_test”,this);
};

data.func_test();
//data.key_func 首先会到对象实例的表里搜索是否有没有这样的 key 若没有再到其__proto__里面搜索

正文完
 0