繼承(3) 閉包封裝,屬性私有化

2021-08-29 02:13:38 字數 1828 閱讀 4418

高大上的寫法:

var inherit = (function();

return function(target,origin)

}());

相當於:

var inherit = (function();

function demo(target,origin)

return demo;

}());

return乙個函式相當於return乙個函式的引用。

閉包的作用第三點:實現封裝,屬性私有化。 如:

有一天deng哥跟大媳婦小劉離婚了,離婚之後呢,有和小媳婦小張結婚了。

問題:deng哥離婚之後媳婦為什麼會換成小張呢?

var preparewife = "xiaozhang";這個變數是函式裡面由於函式執行產生的執行期上下文裡面的乙個變數,函式執行完之後他是不是就被銷毀了,那為什麼還能用呢?

divorce = function()這個方法在物件上,由於這個物件被返回,是不是這個方法也被返回了,所以這個方法他用這個變數是不是能行。

這個divorce是在外部執行的為什麼能用人家內部的變數呢?

是不是閉包啊!這個函式被儲存到了外部,所以他儲存了這個函式的執行期上下文,

儲存了執行期上下文,是不是咱就可以用這個閉包啊?

所以preparewife這個變數是被divorce ,changepreparewife,sayprepare 這三個函式所共用的。這三個函式分別和deng這個函式形成了閉包。所以這三個函式共同用deng的ao吧,所以他們在外部可以隨意訪問,

好了,現在有一天大媳婦小劉問你deng哥,你在外面是不是有人啊,,你deng哥說沒有,不信你試試啊

,果然大媳婦小劉沒有找到。

他真實的自己是不是能操作,所有的方法都能操作這個變數吧,但是你問他,我沒有,並沒有啊,所以這個變數他能用,表面上看並不是他自己的,但是這個閉包能緊跟著他,是個隱藏的區域,所以這個變數變的像他的私有化的變數似的,只有他自己能看到,別人看不到,所以這樣的閉包的應用叫做私有化變數。

所以你想看到這個變數的話,你只能通過老deng的方法,比如說say這個方法,還得是他確實設定了這個方法,讓你去看,讓你去讀,你才能知道吧,你想直接通過老deng你看不到。

那現在

return function(target,origin)
這個過程是乙個什麼過程?

最後是不是變成了這樣:

var inherit = function(target,origin)
那現在這個f哪去了?是不是最後沒有了,然而真的沒有了嗎?

是不是不是,形成閉包了吧,形成閉包之後他是不是成了這個函式的私有化變數了,

而var f = function(){};變成乙個私有化變數是乙個非常好的寫法,因為本身這個f,

他用來就是過度一下的,根本就沒有實際話的用途,所以咱們把他放在閉包裡面,當作私有化變數,看起來是不是,寫法上語義上更好。

C 封裝(成員屬性私有化)

c 封裝 成員屬性私有化 include include using namespace std 成員屬性設定為私有 1 可以自己控制讀寫許可權 2 對於寫可以檢測資料的有效性 class person 獲取姓名 string getname 獲取年齡 可讀可寫 如果想修改,年齡的範圍必須是0 15...

python 私有化屬性

python 沒有和其他程式語言一樣的定義共有屬性和私有屬性的關鍵字,實現屬性私有化和屬性保護,都是使用 格式進行的偽效果。私有化使用場景 保護屬性 比如銀行存款等,存款直接外放非常危險,就可以私有化,然後通過類提供的方法增加刪減鉛筆的金額,對存款進行保護。內部過濾 過濾一下不符合屬性的資料,資料不...

閉包 私有屬性

當內部函式被儲存到外部時,將會生成閉包。閉包會導致 作用域鏈不釋放,造成記憶體占用。練習題 function test return arr 返回到外部 用myarr接收返回的陣列 var myarr test 執行test函式 返回arr裝了10個function 呼叫十個function for...