2010-11-18 32 views
5

我有一些JavaScript代码定义了一个函数getElementsByAttribute如下:Object.prototype中在JavaScript

Object.prototype.getElementsByAttribute = function(attr) { 
    var children = this.all || this.getElementsByTagName('*'), 
     ret = [], i, c; 
     for(i=0; i<children.length; i++) { 
      c = children[i].getAttribute(attr); 
      if(typeof c == "string" && c != "") 
       ret.push(children[i]); 
     } 
    return ret; 
} 

这个工作在我测试的所有浏览器,除了IE 7(大概低) - 这些的browers抛出“对象不支持这个属性或方法。”
我可以想到的唯一不同的是,当我定义了原型函数时,对象已经创建...
将函数定义为...的好办法,“正常”函数并将元素作为参数传递,是否有任何方法可以在IE7及以下版本中实现这一功能?

回答

6

IE DOM元素不是正常的Javascript对象,并且不像您期望的那样继承原型。

http://perfectionkills.com/whats-wrong-with-extending-the-dom/

+0

谢谢 - 好东西我不经常使用这些东西,并且已经有了后备! – 2010-11-18 02:01:34

+0

但他并没有试图添加DOM元素的原型,而是添加了Object的原型,完全不同。 – 2012-12-18 10:02:38

+0

@torazaburo:是的,但他期望DOM元素继承Object.prototype。他们不。 – SLaks 2012-12-18 14:09:42

1

添加的东西Object.prototype真的坏主意。它将被添加到每对象,这将导致意外行为,我保证它。

只需定义您的函数并将其装饰到您需要的任何动态对象上即可。

+0

好的,将其重新定义为正常功能。谢谢:) – 2010-11-18 02:51:58

+0

@Kolink,建议*不*重新定义它作为一个正常的函数,虽然这是一个合理的事情要做,而是明确地将它添加到你将要调用它的对象。 – 2012-12-18 10:03:49

相关问题