function person(name, sex, age, addr, salary) { this.name = name; this.sex = sex; this.age = age; this.addr = addr; this.salary = salary; }
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");
一、總結:javascript
console.log("new 與 prototype"); //一、let variable ={}; //二、nodejs中每一個對象都有一個__proto__屬性 // 創建兩個對象之間的關聯: // 一個對象可使用__proto__關聯另一個對象 // __proto__(對象的內部原型的引用): prototype(對象的原型) 淺拷貝 // __proto__與prototype指向同一個對象的引用 //三、 對象實例做爲this指針的指向 傳遞給後面的函數 //四、 調用這個函數
二、能夠經過prototype.key=value 來擴充對象Elfjava
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");
三、 實例.__proto__ 與 方法.prototype指向 同一個對象的引用node
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); };
四、實例.__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");
五、能夠將對象實例看作爲一張字典表this
//能夠將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");
六、調用取值的順序prototype
data.func_test=function () { console.log("new func_test",this); }; data.func_test(); //data.key_func 首先會到對象實例的表裏搜索是否有沒有這樣的key 若沒有再到其__proto__裏面搜索