今天來認(rèn)識一下函數(shù) 高級(原型與原型鏈,執(zhí)行上下文與執(zhí)行上下文棧,作用域與作用域鏈,閉包)
1 .原型 prototype(函數(shù)的屬性,是個(gè)函數(shù)就有,內(nèi)置屬性)
舉個(gè)例子,Date作為一個(gè)函數(shù),他的內(nèi)置屬性(date.prototype)是一個(gè)對象,里面有若干方法,這些方法是給它的實(shí)例使用的
每個(gè)函數(shù)都有一個(gè)prototype屬性,它默認(rèn)指向一個(gè)object空對象
原型對象中有一個(gè)屬性為:constructor,指向函數(shù)對象 !!!按住ctril點(diǎn)系統(tǒng)函數(shù)可查看系統(tǒng)函數(shù)的原型
eg:function type() {} 為這個(gè)空函數(shù)原型動(dòng)態(tài)添加一個(gè)屬性:
type.prototype.test2= function() {}

type.prototype.constructor = = = type
!!!原型的主要作用:
首先要清除,給原型對象添加的屬性(一般是方法)給該函數(shù)的實(shí)例對象使用
alt+shfit+r(rename)修改頁面中所有相同的名字
2.顯式原型(理解原型很關(guān)鍵!!!) 全稱:顯示原型屬性
基本可以認(rèn)識為上面介紹的原型
實(shí)例一個(gè)對象:var test = new type(); test. test2();實(shí)例使用動(dòng)態(tài)添加的方法
3.隱式原型(每一個(gè)實(shí)例對象都有一個(gè)隱式原型__proto__)
隱式原型的值等于其構(gòu)造函數(shù)的顯式原型的值
function Fn () = {} var fn = new Fn() Fn.protptype = = = fn.__proto __(引用屬性)
存放的是相同的地址
******************了解內(nèi)存結(jié)構(gòu)圖:誰添加的prototype,__proto__
在函數(shù)創(chuàng)建后添加顯式:this.prototype = {} //創(chuàng)建了空的對象 系統(tǒng)完成的,所以才說每個(gè)函數(shù)都有一個(gè)prototype(地址,引用變量屬性)空對象
對象創(chuàng)建后添加隱式:
在var fn = new Fn() 中有一步操作:this__proto__=Fn.prototype
*****************************************畫圖

程序員可直接操作顯式原型,不能操作隱式原型(在es6之前)
實(shí)例首先在本地尋找方法,找不到再去調(diào)用原型的方法;
浙公網(wǎng)安備 33010602011771號