js封裝(即物件導向,不懂物件導向思想的同學不用向下看了)
js並不是一種面向對向的語言, 沒有提供對類的支援, 因此我們不能像在傳統的語言裡那樣 用class來定義類, 但可以利用js的閉包封裝機制來實現js類, 封裝乙個簡的charlesobj類.
function charlesobj() ;
this.init = function();}
這個類裡定義了兩個方法:show和init, 需要注意的是這裡用到了this來宣告, 而不是var, 因為用var是用來定義私有方法的.
以下是對封裝的js類呼叫
varcj =
newcharlesobj(
);cj.
show();
cj.init();
這樣看來貌似封裝也不過如此,但如果我們有在網上找過js**或者外掛程式的話,經常會在**中看到類似這樣的**
(function());
這樣的**其實就是所謂的閉包了,那麼閉包在js中究竟起個什麼作用?
我們如果問朋友或查資料通常得到的都是:
閉包就是指變數在某個作用域上的值,這個變數只在這個作用域上起作用。閉包對變數而言,閉包指某個作用域。
一直很奇怪,如果是作用域的問題,完全可以用全域性變數和區域性變數來解決,為何還專門要搞個閉包出來,這不是閒的蛋疼;
function f1()
function f2()
return f2;
}var result=f1();
result(); // 999
nadd();
result(); // 1000
在這段**中,result實際上就是閉包f2函式。它一共執行了兩次,第一次的值是999,第二次的值是1000。這證明了,函式f1中的區域性變數n一直儲存在記憶體中,並沒有在f1呼叫後被自動清除。
既然了解了閉包值會一直存在於記憶體中,那麼自然我們不能濫用閉包,否則會大大增加記憶體的消耗
本文仍是在本人似懂非懂下寫的,主要想看下自己究竟是否真正理解,許多東西我們聽上去挺簡單,但往往我們很久之後還是不會,原因很大一部分是因為我們的動手能力太差,此句僅說給自己聽
JS 繼承和閉包
一 原型鏈進行繼承 1.js的繼承主要依靠原型鏈來實現,使函式的原型指向另一函式的例項,依次來完成繼承,其實質就是重寫原型物件。繼承後屬性和方法的依照原型鏈進行搜尋,1 先在例項中搜尋,2 搜尋subtype.prototype,3 搜尋supertype.prototype,直到找到該方法或者該屬...
js中閉包的理解和閉包的應用
通俗一點,個人理解 閉包是函式內部 定義乙個在函式作用域下的函式 作為返回值,該函式的的變數外部無法修改。function f1 f1得到乙個函式 變數的作用域是在定義時候確認,而不是執行時確認 var f1 f1 var a 200 f1 輸出 100 乙個函式變數的作用域是在定義時候的作用域 而...
js的作用域和閉包
1.作用域 乙個變數的可用範圍 全域性作用域 除了函式內,客廳 區域性作用域 函式內 小房間 全域性變數 在全域性作用域內宣告的變數 客廳裡面的東西 區域性變數 在區域性作用域內宣告的變數 你臥室裡面的東西 全域性作用域不能訪問區域性,區域性作用域可以訪問全域性 2.閉包 用來解決全域性汙染的,用來...