作者Eleganse (王建民)
看板Ajax
标题Re: [问题] JS全域变数如何透过网页控制项动态赋值?
时间Wed Mar 14 13:22:37 2012
经由上次Lapass大的介绍,认识了JS程设中eval的用法。
小弟是ASP.NET,C#写手,对於JS的了解,仅止於写作一些小型客端程式,
没想到此eval的用法,意外解决了物件导向网页设计中,
伺服器端程式布署JS码时的诸多限制。
仅此分享一段简化过後的JS码。
<script type="text/javascript">
function Point_1(){alert('Point_1');}
function Point_2(){alert('Point_2');}
function Point_3(){alert('Point_3');}
function PointFunctionCall(FunctionID) {
eval('Point_' + FunctionID + '()');
}
</script>
非常易懂的eval用法,就是以"变数"的姿态传入函数名,并呼叫之。
以前尚未用及eval函数时,类似的效果必须大费周章透过伺服器端程式
(1)准备全域变数。
(2)制作赋值这些全域变数的函数。
(3)或控制项。
现在可好了,可以用函数的方式来呼叫这些参数档。
我甚至认为,只要程设师脑力所及的创意,任何物件导向客端程式的样板,
均可透过eval协助来完成,没有写不出来的东西。
仅此与各位先进讨论与分享。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.61.67
1F:推 LaPass:如果你去学一下php的话,你会发现连php也可以这样搞 XD 03/14 13:27
2F:→ LaPass:我是指伺服器端也使用evel 03/14 13:27
3F:→ wxyy:多想两分钟, 你可以不必使用eval 03/14 13:41
※ 编辑: Eleganse 来自: 140.115.61.67 (03/14 13:50)
4F:→ Canboo:让我想到了XSS...新手不建议直接跳太多 03/14 14:17
5F:推 mrbigmouth:要做到类似效果 把function存进object里面再用[] call 03/14 16:57
6F:→ mrbigmouth:会比较好... 03/14 16:57
7F:→ mrbigmouth:其实正常语言做法都是直接指向function位址去call 03/14 16:58
8F:→ mrbigmouth:反正方法有一堆 何必用eval 03/14 16:58
9F:→ tyf99:写了几年的js,还没有用过eval 03/14 18:28
10F:→ grence:典型的误用 eval.用 window['Point_'+ FunctionID](); 即可 03/14 19:41
11F:推 mrbigmouth:楼上正解 我忘记window本身是物件了 XD 03/14 20:36