1
Front OP 补充下:实际上我的疑惑的是,在前端中有很多概念例如:事件,元素我们可以通过onclikc这样去指定它的点击事件,也可以通过JS去为元素绑定点击事件,也可以用JQ。那这个事件的概念到底是HTML的、JS、还是JQ的?
|
2
jsonline 2014-08-03 20:11:59 +08:00 via Android
是 DOM 的
|
3
jsonline 2014-08-03 20:12:30 +08:00 via Android
这些东西都是有W3C标准的
|
6
tinyhill 2014-08-03 20:21:15 +08:00
有种东西叫 DOM http://www.w3.org/DOM/
|
7
ss098 2014-08-03 20:23:43 +08:00
|
11
jsonline 2014-08-03 20:53:37 +08:00 1
1. 这是 DOM Event 的技术文档 http://www.w3.org/TR/DOM-Level-2-Events/events.html
2. 浏览器按照文档给 DOM 实现了 onclick、addEventListener 等 API,所以 JS 可以调用。 3. JS 本身没有事件机制。 4. 你可以实现自己的 JS 事件机制。 5. 不用说「万物皆XX」,因为总有例外。 |
12
jsonline 2014-08-03 20:58:32 +08:00
@eslizn JS 不需要设计模式,设计模式是为了弥补语言自身的不足。http://zhi.hu/3Ozy 要学设计模式?去写 Java 吧。
|
13
jsonline 2014-08-03 21:02:49 +08:00 1
有件事楼主没有弄清楚,事件不是 JS 主动绑定的,JS 只是被动地被调用。比如
body.onclick = foo 这句话的意思是 JS 告诉浏览器,如果 body 被点击了,你就调用我的 foo 方法好不好? onclick 会不会被调用,得看浏览器的「心情」的。 你觉得 JS 在这里面扮演了什么角色呢? |
14
loading 2014-08-03 21:04:31 +08:00 via Android 1
学得这么玄?佩服
|
15
jsonline 2014-08-03 21:08:07 +08:00
浏览器在「监听/捕获事件」,
JS 只是在添加「事件处理函数」 |
18
akfish 2014-08-03 21:31:59 +08:00 1
@jsonline 知乎那个答案完全没喷在点上,说得好像语言/类库实现那些功能没有用到设计模式一样。
喷设计模式的一般也就两类人,一是被滥用设计模式的小白烦得不行的人,一是学不好设计模式而酸葡萄的小白。 真要有人觉得设计模式完全没用就是垃圾,那就呵呵了。 包括那些喷设计模式喷得非常起劲的大牛,你在他的代码里到处都看得到设计模式,因为一个系统要做得好,最后大概就会变成那种模式来(滥用设计模式的人则是完全反过来)。 设计模式本身就是对好的代码实践的总结,主要目的是大家形成一个统一的黑话,交流起来方便。 A:"你这个代码是怎么一回事?" B:"哦,你看这是observer,那里一个bridge,有个三方库adapter进来的" 没有设计模式的话: B:"哦,客官你听我慢慢道来,这里大概有30多个类,我从头到尾跟你讲一遍……" |
19
jsonline 2014-08-03 21:36:12 +08:00
|
20
akfish 2014-08-03 21:50:16 +08:00
@jsonline 设计模式是一种存在,只要系统规模达到一定程度,必然就会出现某种模式,不管是否人为(即刻意的去用设计模式)。
设计模式的问题从来就是滥用/误用的人,很多人没搞清楚喷点在哪里纯跟风,于是完全就喷错了。 就好比C党在Linus的带领下最喜欢喷C++党,喷到现在就变成不少人张口就来OOP是垃圾,而其实Linus的主要喷点是C++会导致误用/滥用OOP。Linux Kernel,Git等项目的源代码,只要看过的人就知道,不少OOP。 所以现在看到人说xxx是垃圾,各种呵呵。 |
21
Front OP |
22
Front OP |
23
jsonline 2014-08-03 21:53:15 +08:00
@Front 手抖点到感谢了。浏览器当然是 HTML/CSS/JS/DOM 的底层,不过它也是要遵循W3C标准的,W3C标准同时又会照顾流行的 HTML/CSS/JS/DOM 趋势。
|
25
akfish 2014-08-03 21:56:44 +08:00
|
26
jsonline 2014-08-03 21:56:45 +08:00
@akfish OOP 也是在模板(Struct)上面发展的,说 C 里面有 OOP 有点误解 C 开发者的本意了。
我反正是几年没用过面向「类」的设计模式了。 |
28
eslizn 2014-08-03 21:59:23 +08:00 1
@Front 比如像某个DOM对象,它是由浏览器掌控,对于浏览器支持的事件(例如click),被浏览器捕捉到以后,会激活一个约定好的callable对象(当然我们可以对这个对象进行修改,也就是俗称的"绑定事件",冒泡什么的跟这个话题关系不大,是属于DOM对象自己实现的一个特性).
而一个自定义对象的事件触发及处理,取决于你怎么定义的这个对象 ^_^ |
30
jsonline 2014-08-03 22:03:32 +08:00
@Front 这个关系太复杂了吧
现有 HTML CSS 和 浏览器,后来 NetScape 发明了 JS,IE 马上跟进并大力提升了 JS 的功能和性能。于是 JS 流行起来,JS 的流行催生 W3C 标准(HTML标准、HTML DOM 标准、CSS 标准、ECMAScript 标准……)的诞生。怎奈 IE 已经占领山头,大有其标准于不顾的气势。虽然有 Monzilla / WebKit 力挺 W3C,但是势单力薄。知道 Google 的 Chrome 横空出世,惊艳的 UI 使得 IE 无地自容,只有那些食古不化的企业应用还在兼容 IE。现如今,IE 只能蜷缩在 China 大陆的无数 XP 系统中。 |
31
akfish 2014-08-03 22:03:43 +08:00
@jsonline C语言的设计的确是没有考虑OOP,但是可以实现OOP。
最早版本的C++原型没记错的话,就是以C为编译目标,用C实现的OOP,相当于语法糖。 不少的C项目,也的确是刻意的去用OOP,用语也会涉及class/object之类的词汇,这些不管是从文档还是代码注释里都有体现。 |
33
jsonline 2014-08-03 22:05:48 +08:00
@akfish C 我不熟,你懂的比我多些。但单论 OOP,我更喜欢 JS 的面向「object」的OOP,不喜欢 Java 的面向「class」的OOP。而Java的「设计模式」,都是面向「类」的。于是……路人转黑。
|
34
akfish 2014-08-03 22:17:44 +08:00
@jsonline 其实OOP都是同样的一种抽象方式,不同语言的表述和实现不同而已,有的语言/实现容易导致误用滥用,因此喷点槽点众多。比如Java里OOP是唯一选项,导致不适合OOP的应用也非得用OOP开发,后果当然会很呵呵。C++的问题则是选项过多,导致奇技淫巧党巨多,尤其是刚学过两天Template Meta-programming的。
JS里OOP不烦人主要是因为它只是一种选项,不会把简单的任务复杂化,复杂的任务一OOP就能简单化。 这里有篇文档就是说的Linux Kernel里面的OOP http://lwn.net/Articles/444910/ |
35
akfish 2014-08-03 22:21:58 +08:00
好吧,歪楼这么多还是解答下lz的问题吧。
事件是元素自身的性质/机制; JS语言用于描述这种性质及其实现; JS语言运行时负责执行; 浏览器负责解析HTML、CSS、JS文件,创建DOM对象,创建JS运行时。 |
36
Front OP 看到现在,心里大概有谱了,不过感觉大家说的各自都有些不一样,所以容我梳理梳理。最后还是要谢谢各位。
|
37
shyrock 2014-08-04 12:07:48 +08:00
|