Web_Design 板


LINE

比較好奇那個 enumerable 是怎麼運作的。 如果手動設置 Parent.prototype.a = 'b' , 那所有實例的 .a 屬性都會是 enumerable ; 但這和用 Object.create 的結果不一樣。 Object.create 會把繼承來的屬性設為 no enumerable , 如果用自己實現的 cretae 函數也是: function myCreate(parent) { function F() {} F.prototype = parent return new F() } 或是把 function 的 prototype 換掉: function myClass() {} myClass.prototype = { say: function () { console.log('hey') }, foo: 'bar', constructor: myClass } 好像只有當原型鏈是指向的是 function 自帶的 prototype 時, enumerable 才會作用,不知道為什麼規格要這樣定。 我本來以為 enumerable 是在定義屬性時就跟著的, 可是 Object.create 後會一律把來自原型鏈的都設為 no enumerable 。 用 hasOwnProperty 看,這些屬性不是在實例上, 但原型的 enumerable 還是 true ……。 總覺得很奇怪。 -- +------+ | 胡 | 不要因為偉人的照片。 | | | 適 | 就輕易相信文字內容。 +------+ --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.102.187
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Web_Design/M.1504585191.A.AE9.html
1F:推 nnlisalive: 我已經放棄思考了 反正這都是node.js設計者的邏輯 09/06 18:45
2F:→ nnlisalive: 可能他們認為不這樣做 會碰到一些XXOO的問題 09/06 18:45
3F:→ nnlisalive: 知道輸入啥程式碼 瀏覽器會正常執行就好 >_< 09/06 18:46
4F:→ nnlisalive: 我是看書上寫說javascript沒有繼承 所以node.js才用 09/06 18:48
5F:→ nnlisalive: prototype的概念弄出繼承 但既然繼承很重要 為啥不直 09/06 18:49
6F:→ nnlisalive: 接把繼承這個東西 放進JavaScript語法裡? 09/06 18:49
7F:→ nnlisalive: C/C++好像都有繼承 JavaScript學他們就好啦 09/06 18:50
javascript 有繼承啊, Object.create 就是 js 的繼承。 只是和 new 不相容ㄎㄎ 可以看這篇: https://segmentfault.com/a/1190000002596600 看完我就大概知道 js 的繼承在幹麻了, 事後要用 new 或 Object.create 就看個人吧。 ※ 編輯: hijkxyzuw (140.116.102.187), 09/06/2017 20:10:21
8F:→ bibo9901: 參考lua的metatable就可以知道js的prototype的設計很差 09/06 22:49
9F:→ bibo9901: prototype, [[prototype]], __proto__ 非常累贅的 09/06 22:51
等等,我錯了,好像會影響, 那這篇就沒什麼意義了, 除了文末的推薦文章真得不錯外。 ※ 編輯: hijkxyzuw (140.116.102.187), 09/07/2017 23:54:47 上面貼的那篇延伸閱讀,主要是介紹另一種不使用 new , 純使用 Object.create 實作的繼承模型。 不使用 new 的原因是 new 是一個「關鍵字」, 和 javascript 的函數式風格不合; 例如你無法為 new apply 參數: new MyClass.apply(null, [a,b,c]) // error 另外 new 讓 javascript 看起來像是用了 java 的繼承模型, 但當你要用到「更進階」的功能, 實作起來相當詭異,完全不像 java 。 像 this 綁定問題,繼承問題: function Parent() {} function Child() {} Child.prototype = new Parent() // 這樣繼承 // 用 Object.create 會好看一點,也沒有副作用; // 如果怕呼叫了 Parent 產生的的物件會不乾淨的話。 Child.prototype = Object.create(Parent.prototype) // 但不管怎麼做,事後都要再手動修正 constructor Child.prototype.constructor = Child 這種繼承怎麼看都很詭異, 所以原作者才會鼓吹另一種繼承。 至於和 new 之間是可以轉換的, js 是個函數式的語言,超級彈性, 應該沒有不能轉的。 只是,就 new 或 Object.create 挑一種做吧, 成果的是類似的,挑一種喜歡的手段即可。 ※ 編輯: hijkxyzuw (140.116.102.187), 09/08/2017 00:24:36
10F:推 eight0: 那篇文章寫於 2013/5/26,作者重造了整個繼承系統,在那時 09/08 02:16
11F:→ eight0: 也許是有好處的,但現在用 class 比較好 09/08 02:16
12F:推 eight0: 另外要展開陣列︰new MyClass(...[a,b,c]) 09/08 02:19
一直沒有細讀 ... 算符,只記得功能很多。 反正作者最主要的目的就是把 new 去掉, 因為 new 很奇怪,和 javascript 的其它部份格格不入。
13F:→ reinforce15: "這種繼承怎麼看都很詭異" 這句有點怪怪的, 有想過 09/08 20:00
14F:→ reinforce15: javascript是直譯語言嗎, 既然是直譯語言又要再 09/08 20:00
15F:→ reinforce15: browser上跑,直譯器當然是越輕薄越好,語法越少越好, 09/08 20:00
16F:→ reinforce15: 別忘了,當初javascript可是Bredan老兄趕鴨子上架出 09/08 20:01
17F:→ reinforce15: 來的東西,語言本身上自然會有缺點,有興趣可以查一下 09/08 20:02
18F:→ reinforce15: ECMAScript 09/08 20:02
19F:→ reinforce15: 我竟然會在這裡發文... 算了當我上面什麼都沒說 沒說 09/08 20:06
這裡不能發文嗎??? javascript 是蠻鳥的沒錯 zzz 變數 scope 、繼承、 == 算符, 很多東西都設計的不好。 目前在讀 sicp , 希望可以跳到 lisp 系語言, 就幾乎一切都是函數了。 ※ 編輯: hijkxyzuw (140.116.102.187), 09/09/2017 20:32:47
20F:推 Neisseria: JavaScript 是目前前端必備的技術,一時間不會被取代 09/10 09:27
21F:→ Neisseria: 先前 Google 推 Dart,想取代 JavaScript 就失敗了 09/10 09:28
22F:→ Neisseria: 除了寫前端,完全不會想碰這個語言 09/10 09:28
23F:推 Neisseria: 真的要寫 JavaScript 物件,用 TypeScript 或 Babel 09/10 09:40
24F:→ Neisseria: 寫好再轉程式碼就好,自己手動寫反而費工 09/10 09:40
其實我蠻喜歡 js 的, node.js 也學了一點。 ※ 編輯: hijkxyzuw (140.116.102.187), 09/10/2017 14:26:07







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