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("-------------------------------------------------------" + "

");

三、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("-------------------------------------------------------" + "

");

3、インスタンス._proto__ 方法と方法prototypeは同じオブジェクトへの参照を指す
console.log("  .__proto__     .prototype           ");
console.log(Yuzuru.__proto__);
console.log(Elf.prototype);

console.log("-------------------------------------------------------" + "

"); 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("-------------------------------------------------------" + "

"); 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("-------------------------------------------------------" + "

");

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("-------------------------------------------------------" + "

");

6、呼び出し値の順序
data.func_test=function () {
    console.log("new func_test",this);
};

data.func_test();
//data.key_func                      key        __proto__