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灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP