Re: [問題] JS全域變數如何透過網頁控制項動態賦值?

看板Ajax作者 (王建民)時間12年前 (2012/03/14 13:22), 編輯推噓3(308)
留言11則, 6人參與, 最新討論串2/2 (看更多)
經由上次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

03/14 13:27, , 1F
如果你去學一下php的話,你會發現連php也可以這樣搞 XD
03/14 13:27, 1F

03/14 13:27, , 2F
我是指伺服器端也使用evel
03/14 13:27, 2F

03/14 13:41, , 3F
多想兩分鐘, 你可以不必使用eval
03/14 13:41, 3F
※ 編輯: Eleganse 來自: 140.115.61.67 (03/14 13:50)

03/14 14:17, , 4F
讓我想到了XSS...新手不建議直接跳太多
03/14 14:17, 4F

03/14 16:57, , 5F
要做到類似效果 把function存進object裡面再用[] call
03/14 16:57, 5F

03/14 16:57, , 6F
會比較好...
03/14 16:57, 6F

03/14 16:58, , 7F
其實正常語言做法都是直接指向function位址去call
03/14 16:58, 7F

03/14 16:58, , 8F
反正方法有一堆 何必用eval
03/14 16:58, 8F

03/14 18:28, , 9F
寫了幾年的js,還沒有用過eval
03/14 18:28, 9F

03/14 19:41, , 10F
典型的誤用 eval.用 window['Point_'+ FunctionID](); 即可
03/14 19:41, 10F

03/14 20:36, , 11F
樓上正解 我忘記window本身是物件了 XD
03/14 20:36, 11F
文章代碼(AID): #1FO2iW8Q (Ajax)
文章代碼(AID): #1FO2iW8Q (Ajax)