MINE筆記-面向物件程式設計,原型鏈的理解,建構函式,原型物件,例項化物件,prototype 運用
// to do list 建立建構函式,例項化物件,來做面向物件程式設計 // 建立建構函式--原型函式(原型物件) function person(name,age,id){ this.name = name; this.age = age; this.id =id // console.log(this) } // 建立例項化物件 學生jesica資訊 var jesica = new person('jesica','18','id:99') console.log(jesica) //輸出 //age: "18", //id: "id:99", //name: "jesica" // 建立例項化對 學生ago資訊 var ago = new person('ago','15','id:88') ago.tip = 'just a little boy' console.log(ago) //輸出 //age: "15", //id: "id:88", //name: "ago", //tip: "just a little boy" // 給建構函式person 加上all屬性 person.prototype.all = 'allmssge' console.log(jesica) //輸出 //age: "18", //all: "allmssge", //id: "id:99", //name: "jesica" console.log(ago) //age: "15", //all: "allmssge", //id: "id:88", //name: "ago", //tip: "just a little boy" var newman = new person('newman','10','55') newman.laught = 'cn' console.log(newman) //age: "10", //all: "allmssge", //id: "55", //laught: "cn", //name: "newman"
什麼是原型鏈。說白了,其實就是有限的例項物件和原型之間組成有限鏈,就是用來實現共享屬性和繼承的。
建構函式有一個prototype屬性,這個屬性是一個物件(object例項),是原型物件
【小結】
套用一句很粗暴的話,所謂原型鏈就是找媽的一種行為方式,就可以理解為人是人他媽生的,妖是妖他媽生的。原型鏈的核心其實就只有一個:屬性共享和獨立的控制,當你的物件例項需要獨立的屬性,所有做法的本質都是在物件例項裡面建立屬性。若不考慮太多,你大可以在Person裡面直接定義你所需要獨立的屬性來覆蓋掉原型的屬性。總之,使用原型繼承的時候,要對於原型中的屬性要特別注意,因為他們都是牽一髮而動全身的存在。現在最常用的方法是組合模式。
1、原型鏈
1)建構函式、原型和例項的關係
①建構函式都有一個屬性prototype,這個屬性是一個物件(Object的例項)
②原型物件prototype裡面有一個constructor屬性,該屬性指向原型物件所屬的建構函式
③例項物件都有一個_proto_屬性,該屬性也指向建構函式的原型物件,它是一個非標準屬性,不可以用於程式設計,它是用於瀏覽器自己使用的
2)prototype與_proto_的關係
①prototype是建構函式的屬性
②_proto_是例項物件的屬性
——這兩者都指向同一個物件
【總結】i)函式也是物件,物件不一定是函式;
ii)物件的本質:無序的鍵值對集合;鍵值對當中的值可以是任意資料型別的值
iii)物件就是一個容器,這個容器當中放的是(屬性和方法)
3)屬性搜尋
①在訪問物件的某個成員的時候會先在物件中找是否存在
②如果當前物件中沒有就在建構函式的原型物件中找
③如果原型物件中沒有找到就到原型物件的原型上找
④知道Object的原型物件的原型是null為止