一奈揍、準(zhǔn)備代碼:
function? Fun(){this.say ="hello"};
var obj = {name:"piter"};
var fun = new Fun();
構(gòu)造函數(shù):Object,Function,Fun;
對(duì)象:obj,fun,Object,Function,Fun邀桑;
__proto__:指針合搅,指向(其構(gòu)造函數(shù)的)prototype
prototype:方法贬媒,有__proto_屬性
二粉私、首先把幾個(gè)要點(diǎn)總結(jié)起來,第4點(diǎn)圈起來
劃重點(diǎn)來了
1.每個(gè)對(duì)象(包括函數(shù)壁顶,構(gòu)造函數(shù)都是對(duì)象珠洗,js里面一切皆對(duì)象),都有個(gè)__proto__屬性若专;prototype(作為方法许蓖,也是對(duì)象)有__proto__;
以上都有__proto__
2.每個(gè)構(gòu)造函數(shù)(包括js內(nèi)置對(duì)象如Function,Obeject),都有一個(gè)prototype方法;(Object,Function,Fun等)
3.實(shí)例出來的對(duì)象沒有prototype屬性膊爪;? ? ? ?(obj,fun沒有自阱,為undefined)
4.每個(gè)對(duì)象的__proto__都指向其構(gòu)造函數(shù)的prototype方法;
實(shí)例出來的fun,obj在整個(gè)鏈子的最后
? fun.__proto__ ===? Fun.prototype? ? ?//(true)
?Fun.__proto__ === Function.prototype? ? ?//(true)
?Function.__proto__ === Function.prototype? //(true)
?Function.prototype.__proto__ === Object.prototype? ??//(true)
? Object.prototype.__proto__? ===? null;
? Object.prototype.__proto__在整個(gè)鏈子的最初
5.一切的終端 最后指向?Object.prototype.__proto__ 指向 null米酬;
6.構(gòu)造函數(shù)同時(shí)有__proto__和prototype沛豌;意思就是構(gòu)造函數(shù)是承上啟下的紐扣
7.obj是被Object構(gòu)造出來的;
obj.__proto__=== Object.prototype? //(true)
最后記住 __proto__(對(duì)象的) 指向 prototype ,? ?prototype(構(gòu)造函數(shù)的) 有__proto屬性赃额,順序很重要??
思考問題:
1.為什么沒有__proto__是null琼懊,沒有prototype是undefined?
2.var hi = new Fun() 和 var hi = new Fun有什么區(qū)別?
3.為什么__proto__和 prototype 在控制臺(tái)是灰的爬早?和不是灰的屬性有什么區(qū)別?
4.把?fun.prototype = Fun.__proto__? 启妹,這樣可以不可以看成fun也是一個(gè)具有prototype的構(gòu)造函數(shù)筛严? 但是實(shí)驗(yàn)錯(cuò)誤,顯性和prototype 和隱性的prototype有什么區(qū)別饶米?
5.隱性的constructor 是干嘛用,為什么是個(gè)無底洞?
以下是有趣實(shí)驗(yàn)檬输,幫助加深理解
? 1??? fun.constructor.prototype.constructor.prototype? ?...為什么可以一直這樣下去照瘾?
? 2??fun.constructor.prototype.__proto__ === Object.prototype? ?//(true),不難理解丧慈,
? 3??? var con = new Fun.constructor; con有prototype析命,意味著con也是個(gè)構(gòu)造函數(shù)
? ? ? ? var cnn = new con; //cnn是個(gè)空實(shí)例對(duì)象,也就是說其實(shí)這里,con與Fun是同級(jí)構(gòu)造函數(shù)了
????????cnn.__proto__ === Fun.constructor.prototype //true
1.每個(gè)對(duì)象都有?constructor
2.Fun.constructor.__proto__ ===? Function.prototype? ? //true
3.constructor是一個(gè)構(gòu)造函數(shù)逃默,可以實(shí)例對(duì)象
6.最后一點(diǎn)鹃愤,這個(gè)三個(gè)屬性,在具體實(shí)操中有什么常用的應(yīng)用完域?可以達(dá)到什么目標(biāo)软吐?(比如性能提速,精簡(jiǎn)代碼)