我定义了一个Node的原型函数'isElement',并且我想使它像'div.isElement'返回'true'一样工作。重定义函数的'toString'和'valueOf'
<div id="dom1">someText
<p>This is p1 of <span class="bold">dom1</span></p>
</div>
Node.prototype.isElement = (function(){
var result;
var fn = function(){
console.log(obj);
result = (this.nodeType == 1 ? true : false);
return result;
};
fn.toString = fn.valueOf = function(){
return result;
};
return fn;
})();
var dom1 = document.getElementById('dom1');
dom1.isElement(); //true
dom1.isElement; //true
如果 'DOM1' 永远不会调用函数 'isElement()',然后 'dom1.isElement' 回归 '不确定'。我明白为什么它返回'未定义',但我想知道如何在'isElement()'永远不会被调用时返回'true'或'false'。
我只是想用它像:
if(dom1.isElement){//do something}
,但不喜欢:
if(dom1.isElement()){//do something}
等待解答,谢谢。
不可能的,因为我知道,除非你改变'isElement'是一个布尔值属性,并修改所有会影响这个'isElement'布尔值的方法。经历这个麻烦真的没有意义。开销可以忽略不计。只需使用它作为方法调用即可。 (我特指最后一部分) – Raekye
正如一般说明,扩展DOM并不被认为是一个好主意。顺便说一下,'if(dom1.isElement)'总是会**评估为'true',因为它是一个(函数)对象(不管你让'toString'返回什么)。 –
您假定DOM元素实现原型继承,并且您可以修改构造函数的原型。既不需要浏览器(或一般的主机环境)来实现原型继承,有的则不需要。 – RobG