一、構造一個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 "+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__裡面搜尋