问页面中的一系列事件是属于元素自身所有还是脚本语言

2014-08-03 20:08:19 +08:00
 Front
问题如题。
具体是,假设我使用js为一个元素绑定了一个点击事件。然后我去点击它。这个时候,这个事件是JS的事件还是元素自身的事件?
如果是元素自身的事件,那这些事件是HTML的还是浏览器的?

不知道我的足不足够清楚。不清楚的请见谅。
3266 次点击
所在节点    问与答
37 条回复
Front
2014-08-03 21:50:29 +08:00
先谢谢所有人的回答。

@jsonline 那实际浏览器跟脚本语言,标记语言的关系就像操作系统跟软件的关系。浏览器提供了一个运行的环境,而这些事件有谁来处理,要看浏览器。可以这样理解么?

@eslizn 你的意思是事件的处理取决于对象么?那对象又是由谁掌控呢?
Front
2014-08-03 21:52:57 +08:00
@akfish
@jsonline
两位别吵啦。其实我觉得这些很多时候最终也只是一种工具,结果还是取决与使用的人。所以,没啥好纠结的~
jsonline
2014-08-03 21:53:15 +08:00
@Front 手抖点到感谢了。浏览器当然是 HTML/CSS/JS/DOM 的底层,不过它也是要遵循W3C标准的,W3C标准同时又会照顾流行的 HTML/CSS/JS/DOM 趋势。
Front
2014-08-03 21:55:04 +08:00
@jsonline 我刚刚也点了别人回复的感谢 - -
我还想问问,浏览器、各种语言、跟W3C标准三者之间的关系。
akfish
2014-08-03 21:56:44 +08:00
@Front
@jsonline
No no no.
并不是在吵,其实我们的观点是一致的,我也爱喷设计模式玩不转还天天挂在嘴边的人。
主要是知乎那个答案nb哄哄的说了一大堆,把设计模式喷成没有多大用途的垃圾, 的确太呵呵了。
jsonline
2014-08-03 21:56:45 +08:00
@akfish OOP 也是在模板(Struct)上面发展的,说 C 里面有 OOP 有点误解 C 开发者的本意了。
我反正是几年没用过面向「类」的设计模式了。
Front
2014-08-03 21:57:23 +08:00
@akfish 嘿嘿,原来。能理解
eslizn
2014-08-03 21:59:23 +08:00
@Front 比如像某个DOM对象,它是由浏览器掌控,对于浏览器支持的事件(例如click),被浏览器捕捉到以后,会激活一个约定好的callable对象(当然我们可以对这个对象进行修改,也就是俗称的"绑定事件",冒泡什么的跟这个话题关系不大,是属于DOM对象自己实现的一个特性).

而一个自定义对象的事件触发及处理,取决于你怎么定义的这个对象 ^_^
Front
2014-08-03 22:01:27 +08:00
@eslizn 原来是这样。明白了。谢谢~
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 系统中。
akfish
2014-08-03 22:03:43 +08:00
@jsonline C语言的设计的确是没有考虑OOP,但是可以实现OOP。
最早版本的C++原型没记错的话,就是以C为编译目标,用C实现的OOP,相当于语法糖。
不少的C项目,也的确是刻意的去用OOP,用语也会涉及class/object之类的词汇,这些不管是从文档还是代码注释里都有体现。
jsonline
2014-08-03 22:03:57 +08:00
@jsonline 「先」有 HTML CSS 和 浏览器
jsonline
2014-08-03 22:05:48 +08:00
@akfish C 我不熟,你懂的比我多些。但单论 OOP,我更喜欢 JS 的面向「object」的OOP,不喜欢 Java 的面向「class」的OOP。而Java的「设计模式」,都是面向「类」的。于是……路人转黑。
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/
akfish
2014-08-03 22:21:58 +08:00
好吧,歪楼这么多还是解答下lz的问题吧。

事件是元素自身的性质/机制;
JS语言用于描述这种性质及其实现;
JS语言运行时负责执行;
浏览器负责解析HTML、CSS、JS文件,创建DOM对象,创建JS运行时。
Front
2014-08-03 23:04:17 +08:00
看到现在,心里大概有谱了,不过感觉大家说的各自都有些不一样,所以容我梳理梳理。最后还是要谢谢各位。
shyrock
2014-08-04 12:07:48 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/125924

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX