閉包是由什麼構成?
閉包 = 函式 + 詞法作用域
詞法作用域:即以變數宣告定義的位置為參照,如果當前位置沒有定義,就會訪問父級定義的位置
廣義上閉包:
var a=
1000
;function
fn1(
)fn1
()
平時工作中用到的閉包狹義上閉包:
1.函式內巢狀函式;
2.子級函式引用了父級函式的相關變數;
狹義上閉包應用場景和實現:
//求和
function
makeadd
(x)}
//設定字型大小
function
setfontsize
(size)
}//迴圈表單
function
makehelp
(help)
}function
init()
,,,]
//動態繫結onfocus事件
for(
var i=
0;iinit()
//封裝元件或外掛程式
var counter=
(function()
varjian
=function()
return
, getvalue:
function()
}})(
)//自呼叫函式
個人理解:
應用場景:繼承
什麼是繼承
繼承是指乙個物件直接使用另外乙個物件的屬性和方法;
繼承可以使子類具有父類的屬性和方法,而不需要再次編寫相同的**;
在子類繼承父類時,可以重新定義某些屬性,也可以重寫某些方法;
es5的繼承–主要通過函式實現類
①原型鏈繼承
//建立乙個父類
functionfu(
)//父類原型
parent.prototype.
getname
=function()
//建立乙個子類
function
child()
//子類的原型等於父類的例項化物件--原型鏈繼承
child.prototype=
newparent()
;var c1=
newchild
()
優點:
缺點:通過原型來實現繼承時,原型實際上會變成乙個型別例項,原先的例項也會變成原型的屬性;
不能向父型別的建構函式中傳遞引數;
沒有解決物件引用問題;
②借用建構函式繼承
//建立乙個父類
function
parent
(name)
parent.prototype.
getname
=function()
//建立乙個子類
function
child
(name)
優點:
可以向父型別的建構函式中傳遞引數;
避免了引用型別的屬性被所有例項共享;
缺點:③組合繼承
通過原型鏈繼承,同時也借用建構函式方式繼承就叫組合繼承
//建立乙個父類
function
parent
(name)
parent.prototype.
getname
=function()
//建立乙個子類
function
child
(name)
//借用原型鏈實現繼承
child.prototype=
newparent()
;var c1=
newchild()
c1.getname
()
優點:
缺點:es6繼承
注意:通過class,extends,super實現 //繼承必須要寫super;
//建立乙個父類
class
parent
getname()
}//建立乙個子類
class
child
extends
parent
getvalue()
}
閉包 原型 原型鏈
1.閉包 函式內部的函式 2.優點 1.隔離作用域,防止汙染全域性 2.有自己的獨立變數 3.快取 3.缺點 1.不容易垃圾 2.消耗記憶體 4.原型 1.函式有乙個prototype物件,可以通過函式的原型物件來實現繼承 2.原型prototype物件上有乙個constructor屬性。是建構函式...
js12 閉包,原型,繼承
var cat function return function this.setage function age alert new cat add 1,2 3,new的時候函式會執行一次 alert newcat age 12 new cat setage 100 alert new cat a...
js12 閉包,原型,繼承
var cat function return function this.setage function age alert new cat add 1,2 3,new的時候函式會執行一次 alert newcat age 12 new cat setage 100 alert new cat a...