例如对于this.parentNode
我想写this.p
或代替 document.getElementById('someid')
只是写document.g('someid')
。当然,这只是简单的例子,我只想知道什么是正确的做法。如何将我自己的方法添加到HTMLElement对象?
(我知道我可以使用jQuery或原型,但我想了解它是如何真正做JS)
例如对于this.parentNode
我想写this.p
或代替 document.getElementById('someid')
只是写document.g('someid')
。当然,这只是简单的例子,我只想知道什么是正确的做法。如何将我自己的方法添加到HTMLElement对象?
(我知道我可以使用jQuery或原型,但我想了解它是如何真正做JS)
虽然你可以原型在许多浏览器HTMLElement
- 的Internet Explorer(6 ,7,8)是不是其中之一。 AFAIK,IE9支持这一点(尽管我还没有测试过)。
对于做处理它的浏览器,你可以这样做:
HTMLElement.prototype.doHello = function(thing){
alert('Hello World from ' + thing);
};
@闪电雷 - 我表示在答案中...... IE6,7,8绝对不在'支持'表中。 – scunliffe 2014-11-21 12:23:58
是的,但你可以简单地使用`Object`而不是`HTMLElement` – 2014-11-21 13:38:43
总之一句话,不要。最好是not to modify objects you don't own。
对于您在某些浏览器中无法修改的HTMLElement
尤其如此。
这article from perfectionkills.com可能会给你一些洞察到它是如何做到的,以及为什么你不应该做到这一点。
(顺便说一句,jQuery的不扩展DOM元素他们使用DOM包装代替。)
我强烈建议不要试图做到这一点,有几个原因:
HTMLElement
原型,并允许您对其进行扩充,但不能保证它能按预期工作。HTMLElement
原型混淆,则可能会导致命名冲突和难以检测到的错误。相反,我会建议围绕DOM节点创建包装对象,如jQuery,YUI和其他库。
Kangax写了一个good article on this,涵盖所有这些要点和更多。
upvote试图了解它是如何做到的。你和我一样是个大控制狂吗? – Mansiemans 2011-09-20 13:56:43