Js的封裝和閉包

2022-08-10 20:54:21 字數 1083 閱讀 3820

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.閉包 用來解決全域性汙染的,用來...