2012-04-26 72 views
0

在javascript中,是否有一种方法来创建所有对象的原型。一个简单的用例将是,我有一个函数:可能原型所有对象

testFn(el) { 
    if(el.isElement()) { 
     //Do something 
    } 
} 

在这里,我想测试是否传递到函数的对象是DOM元素。通常我会使用这个功能:

function isElement(el) { 
    if(typeof el == 'object' && 'nodeType' in el && el.nodeType === 1 && el.cloneNode) { 
     return true; 
    } 
    return false; 
} 

但是,我发现自己一遍又一遍地重写这段代码。如果我可以简单地创建Object的原型,并且可以随时为每个对象提供此功能,那么每当我需要它的时候都会很好。尽管原型对象似乎给我错误。

+0

当你改变Object.prototype中,你可能会感觉不舒服的效果。是否有一部分对象,就像你自己定义的对象一样,你可以解决这个问题?否则,您运行的代码中的所有其他对象都将具有修改的原型,因此(如果您不使用ES5的Object.defineProperty)修改for..in上下文以进行迭代。 – dwerner 2012-04-26 04:44:26

回答

1

是有办法原型上Object所有对象

您可以使用prototype

Object.prototype.isElement = function() { 
    return typeof this == 'object' && 'nodeType' in this && this.nodeType === 1 && this.cloneNode 
} 
+0

'typeof this'总是要返回“object”吗? – 2012-04-26 04:44:19

+0

http://www.websanova.com/tutorials/javascript/extending-javascript-the-right-way解释了如何更安全地扩展Object原型。 – HBP 2012-04-26 07:11:18