iT邦幫忙

6

設計師的 JavaScript 繪卷:JavaScript 的 reference 遊戲

身為網頁設計師的妳,是否對 JavaScript 程式裡面一大堆變數啊名稱啊感到暈頭轉向呢?讓我們一起來搞懂到底誰叫什麼名字吧! ^_^
ps. 就在「JavaScript 忍之道」活動剩下 8 分鐘截止的現在,強者我朋友告訴我圖片的內容又出現了恐怖的錯誤... 不過已經來不及修改了!應該是說!我根本聽不懂他在講什麼!∫OoO∫ 還要請各位大大幫忙指教... 謝謝 >o<bbb













0
etblue
iT邦新手 5 級 ‧ 2012-06-01 00:41:52

咦,所以一級物件不是第一層的物件,不是「一等公民、次等公民」這種意思,而是程式設計領域裡面的某個歷史悠久的特定詞彙,定義為:

"an entity that can be constructed at run-time, passed as a parameter, returned from a subroutine, or assigned into a variable." http://en.wikipedia.org/wiki/First-class\_citizen

這幾個都是同義字: "first-class citizen", "first-class object", "first-class entity", "first-class value" 。

jQuery in Action 第二版的中譯,譯為「一級公民」「一級物件」。在中文版的維基百科上則寫做「第一類公民」「第一類物件」。

良葛格 iT邦新手 3 級 ‧ 2012-06-01 09:24:43 檢舉

一級物件、一級公民,就是指它們不會被當作二級物件、二等公民看待啦!在物件導向的社會,物件就是老大,就是一級公民,其它不是物件都是二等公民 .... XD

wordsmith iT邦高手 1 級 ‧ 2012-06-01 12:59:38 檢舉

學JS first-class object常聽到,講到function就會出現,不過我也常在想,那是有second-class object這種東西嗎 XD ,如果有一等公民,那其他的是次等公民還是賤民階級呢......完全是亂想一通

良葛格 iT邦新手 3 級 ‧ 2012-06-01 17:05:50 檢舉

比方說,Java中的方法不是物件,就只能當個次級公民,在地上看著那些可以天上飛來飛去的物件(方法指著天上告訴陳述句說:聽說那些會飛的都戴著一等公民證)...XD

0
良葛格
iT邦新手 3 級 ‧ 2012-06-01 09:49:02

以下雖然是用Java解說,不過對JavaScript也適用:
我們沒什麼不同
Call by value?

我是都用戴名牌來比喻...

看更多先前的回應...收起先前的回應...
player iT邦大師 1 級 ‧ 2012-06-01 19:56:08 檢舉

Java 一樣是 reference 的機制
不像C++, 會明顯區分 point 還是 object, 雖然C++裡也有 ref 關鍵字
所以當C++沒寫好時, 常發生一堆問題(像是記憶體泄漏, 或是記憶體違規存取...)

etblue iT邦新手 5 級 ‧ 2012-06-03 20:02:40 檢舉

為了看懂你的文章跟圖解,只好先去 Google 這個! XDDD
http://bone.twbbs.org.tw/blog/programming\_2012-04-16-candjavamemory.rst.html
然後終於知道 stack 跟 heap 是什麼了!XD

沒寫過其他語言,不曉得您文章中說的 C++ 的 call by reference 是什麼情況,我想請問... call by reference 和 call by value 中譯就是所謂的「傳值」跟「傳址」嗎?是不是 Java 跟 JavaScript 都是只有 call by value 呢?(歪頭)

良葛格 iT邦新手 3 級 ‧ 2012-06-03 22:15:13 檢舉

C++ 的 call by reference一般成「傳參考」,call by value一般譯成「傳值」。

Java都是傳值,JavaScript幾乎是傳值(嗯...我知道有個地方是傳參考...XD)

etblue iT邦新手 5 級 ‧ 2012-06-04 02:40:04 檢舉

なに?!在哪裡在哪裡?∫OoO∫

etblue iT邦新手 5 級 ‧ 2012-06-04 07:35:21 檢舉

啊,我又有個問題,既然 JavaScript 裡面的 variables 全都是 global object (比方說 window )的屬性的話,那... 不就表示它們全都得跟著 global object 一起放在 heap segment 裡面?!∫OoO∫

良葛格 iT邦新手 3 級 ‧ 2012-06-04 10:14:38 檢舉

なに?!在哪裡在哪裡?∫OoO∫

arguments...

既然 JavaScript 裡面的 variables 全都是 global object...

物件才是放在heap,變數不是..

0
bizpro
iT邦大師 1 級 ‧ 2012-06-02 16:57:10

疑惑暈
primitive values不是物件, 有人就用"第二級物件"來表示. 在大部分語言中, functions不是物件, JavaScript稱之為物件, 這只是functional programming對function的另一種定義, JVM上的scala可以定義function, Java 8的Lambda也要引入functional programming的語法, 但是, 這是語法, 不該以第一級物件來混淆.只是這樣的定義容易讓物件導向失焦, 我的看法很簡單, 別陷在名詞定義中. 要學清楚物件導向語言的真實意義.

我翻了翻JavaScript The Definitive Guide 6e, 試圖去理解JavaScript對Object的定義: Any value in JavaScript that is not a string, a number, true, false, null, or undefined
is an object.
也就是說, 除了 primitive values和不存在與無所知的"東西"之外, 都是"Object", 這個Object看起來是包山包海, 又自稱是Dynamic Objects, 可以隨時變形, 看來, 應該稱之為"東西", 唉, 這只是JavaScript的語法, 並非物件導向語言中的物件. 暈了.暈

所以, 千萬別把JavaScript的"東西"或"語法"拿來解釋物件導向的物件. 圖中謬誤, 真是慘不忍睹. 不知板主的用意是?

bizpro iT邦大師 1 級 ‧ 2012-06-02 17:00:05 檢舉

除了稱之為"東西"之外, 或許可以稱為"值物件", 如同書上的定義, any value..., JavaScript看function時, 看到的是"值".

lalabear iT邦新手 2 級 ‧ 2012-06-02 18:21:22 檢舉

JavaScript向來就是把function稱作是一級的物件(這也不是樓主所創,google一下「JavaScript first class object」就會有許多相關的見解),不知道bizpro大大對於這樣的「名詞定義」有什覺得不妥的地方?把JS的物件改稱作「東西」或「值物件」好像也沒更容易溝通。

不過話說回來,舉繼承為例,真正用JavaScript的prototype機制來做的也沒多少,大家也是想盡辦法去模擬class based的作法,而不是用原汁原味的JS作法,這也算是另一種世界觀強行進入JS的開發模式,而JavaScript剛好有那樣的彈性可以應付,造成許多不同的觀念都混雜在一起。

我要留言

立即登入留言