【发布时间】:2011-03-15 22:27:59
【问题描述】:
我有两个主要问题。
扩展像
Object这样的东西算吗?什么是 DOM 包装?
http://perfectionkills.com/whats-wrong-with-extending-the-dom/
阅读那篇文章后,我找不到任何关于 DOM 包装的信息,也没有任何规范以及究竟什么是 DOM 扩展,什么不是 DOM 扩展。
【问题讨论】:
标签: dom mootools javascript prototypejs
我有两个主要问题。
扩展像Object 这样的东西算吗?
什么是 DOM 包装?
http://perfectionkills.com/whats-wrong-with-extending-the-dom/
阅读那篇文章后,我找不到任何关于 DOM 包装的信息,也没有任何规范以及究竟什么是 DOM 扩展,什么不是 DOM 扩展。
【问题讨论】:
标签: dom mootools javascript prototypejs
不,Object 被指定为 Javascript 语言 的一部分,而 DOM 是仅与浏览器环境相关的 API,用于“访问和更新文档的内容、结构和样式”(W3C).
但是,该文章中提供的反对扩展 DOM 对象的原因之一仍然适用于扩展原生类型,例如 Object - 即冲突的可能性。
包装对象是指创建一个引用原始对象的新对象,但通过新的包装对象提供附加功能。
例如,而不是像这样使用跨浏览器 addClass 函数扩展 DOM Element 对象:
var element = document.getElementById('someId');
element.addClass = function (className) {
...
};
您可以改为定义包装函数:
var ElementWrapper = function (element) {
this.element = element;
};
并将函数添加到它的原型中:
ElementWrapper.prototype.addClass = function (className) {
...
};
然后像这样“包装”元素:
var element = document.getElementById('someId');
var wrapped = new ElementWrapper(element);
wrapped.addClass('someClass');
【讨论】: