Ajax 板


LINE

最近寫javascript碰到一個問題 我想在Class裡面宣告很多private變數 但是我查閱了一下javascript似乎沒有這種屬性 只有一種方法製造看似private的變數 就是把變數宣告在裡面如下: Class(){ var a this.getA = function(){ return a }; this.setA = function(myA){ a = myA }; } 但我有非常多的private變數 所以我就得在宣告裡面宣告一堆getter和setter 宣告的code看起來瞬間變兩倍,感覺有夠醜的 而且在自己的method中還是得用 sth = this.getA(); 而不是 sth = this.a 感覺除了增加安全性以外,卻讓code很難看? 請問有人對這個問題有比較好的處理方法嗎? --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.61.45 ※ 編輯: BBSealion 來自: 220.133.61.45 (02/22 16:24)
1F:推 mrbigmouth:要設私有變數不就是不要給外部存取嗎? 02/22 16:31
2F:→ mrbigmouth:幹嘛又設成私有變數又設一堆getter/setter? 02/22 16:31
3F:→ mrbigmouth:(所以這個變數到底要不要給外部存取啊???) 02/22 16:31
4F:→ mrbigmouth:還是回答一下問題好了....如果你想弄一個不給外界存但 02/22 16:33
5F:→ mrbigmouth:能方便取用的變數...目前JS常見的作法的做法是在前方加 02/22 16:34
6F:→ mrbigmouth:__底線以表示"拜托大家不要改這裡否則我就當機給你看" 02/22 16:34
7F:→ mrbigmouth:在ECMAScript5 可以用writable去控制某物件屬性可不可 02/22 16:35
8F:→ mrbigmouth:寫...也能直接定義getter跟setter 02/22 16:36
9F:推 popcorny:http://goo.gl/aWrZ6 02/22 16:50
10F:→ BBSealion:設getter和setter是因為"只能這樣來"仿造"私有變數的 02/22 16:53
11F:→ BBSealion:效果,我查的到的是這樣啦 但也覺得很怪 所以上來問問看 02/22 16:53
12F:→ BBSealion:不這樣做的話自己的method也叫不到他們了ORZ 02/22 17:02
13F:推 lausai:推用底線+註解的方式宣告私有變數 用 nested function 很浪 02/22 17:11
14F:→ lausai:費記憶體 因為你的 Class 每 new 出來一次那些 nested 02/22 17:11
15F:→ lausai:function 就會多出一份實體 02/22 17:12
16F:推 mrbigmouth:你絕對是誤會了什麼...私有變數就是不給人讀也不給人改 02/22 17:13
17F:→ mrbigmouth:getter跟setter是提供外部合法進行存取的途徑 而非必要 02/22 17:14
18F:→ mrbigmouth:比方說你可以只設getter不設setter所以外部就只能讀 02/22 17:15
19F:→ mrbigmouth:也可以設setter但在其中設定檢查函式讓"只有合法的資料 02/22 17:15
20F:→ mrbigmouth:"能進入私有變數 02/22 17:15
21F:→ mrbigmouth:總而言之 你要在js用私有變數用var就好了 02/22 17:15
22F:→ mrbigmouth:setter跟getter都不是必要的 只有某些時候會用到 02/22 17:16
23F:→ mrbigmouth:硬要做私有變數又要弄getter/setter 所有語言都差不多 02/22 17:17
24F:→ mrbigmouth:一樣麻煩 02/22 17:17
25F:→ mrbigmouth:雖然有很多能讓語法變簡潔的lib/套件啦 02/22 17:18
26F:→ BBSealion:to mrb大 可能我沒有描述清楚我的問題,我回文一篇我看 02/22 17:30
27F:→ BBSealion:到的狀況 02/22 17:30
28F:→ BBSealion:底線倒是個很簡單的做法XD 我可以試試看 雖然有點不舒服 02/22 17:31
29F:→ BBSealion:話說單底線和雙底線,在js有很大的差別嗎 02/22 17:43
30F:→ TonyQ:我直接講結論,在 JS 去追求真正外部不能 access 的 private 02/24 00:20
31F:→ TonyQ:其實很多餘。另外底線什麼的只是 naming convention 沒有 02/24 00:20
32F:→ TonyQ:實質效益。 02/24 00:20
33F:→ TonyQ:另外 getter/setter 要不要作,取決於這個 properites 你 02/24 00:20
34F:→ TonyQ:怎麼用,我不覺得一定要寫,但是也不覺得寫了一定多餘。 02/24 00:20
35F:推 matrixki:getter setter寫不寫真的是看需不需要 即使不需要寫了 02/24 17:55
36F:→ matrixki:debug也會用到 所以不致於多餘 02/24 17:55







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP