亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問如何理解var handles = this._handles中的_handles

請問如何理解var handles = this._handles中的_handles

蝴蝶刀刀 2018-09-13 14:09:01
麻煩問一下,我在學習組件,有一段代碼看不太懂,定義handles用var handles沒問題,但是突然多出來的_handles該怎么理解?按照自己之前的固有印象_handles是私有變量,但是明顯之前沒有定義,為什么可以這么用呢。謝謝各位大神!var emitter = {// 注冊事件on: function(event, fn) {var handles = this._handles || (this._handles = {}), calls = handles[event] || (handles[event] = []);// 找到對應名字的棧(據說是列表)calls.push(fn);return this; },
查看完整描述

1 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

先解釋一些代碼的意思

var handles = this._handles || (this._handles = {})

這里on方法沒有主動用其他對象去掉用(call,apply)的話,this代表emitter,this._handles表示在this/emitter中找_handles屬性。與聲明變量和賦值,如”var a = a || 1;“不同,取對象中的屬性不是變量不需要先聲明定義。
在js中,this._handles || (this._handles = {})表示this._handles運算值為false(false, 0, null, undefined)時執行(this._handles = {})。
從邏輯語義上看,當this下_handles屬性沒有初始化或賦有效值的時候就用{}初始化。
至于是否是私有變量看你怎么用,“_”開頭表示私有變量的方式只是一種約定,有很多方式實現私有變量(閉包等)。

附(全局window):

a = 1; // 這個賦值(相當于window.a = 1,這是規范里處理全局變量對象[VO]的方式)而a = a || 1; 
//報錯 這里等號后面的a是未定義的(這里先執行等號后面的,恩,a此時確實未定義),而a = window.a || 1; //正確

不要問為什么 規范就這么定義的 a = a || 1; 不相當于 a = window.a || 1;


查看完整回答
反對 回復 2018-10-12
  • 1 回答
  • 0 關注
  • 719 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號