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

请输入看板名称,例如:Boy-Girl站内搜寻

TOP