Node.js new 、 prototype 与 __proto__

一、组织一个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__内里搜刮
    原文作者:陈杨
    原文地址: https://segmentfault.com/a/1190000017928770
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞