我定义了一个Node的原型函数'isElement',我希望它能像'div.isElement'一样返回'true'。
<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'返回'undefined'。我理解为什么它会返回'undefined',但我想知道当'isElement()'永远不会被调用时如何让它返回'true'或'false'。
我只想使用它:
if(dom1.isElement){//do something}
但不喜欢:
if(dom1.isElement()){//do something}
等待答案,谢谢。
答案 0 :(得分:1)
如评论中所述,JavaScript语言不保证DOM实现提供标准的JS对象工具。
也就是说,如果您确定您的环境始终支持这些,那么在这种情况下会调用getter,实际上您可以编写一个在请求特定属性值时调用的函数。
有关详细信息,请参阅MDN:
Node.prototype.__defineGetter__('isElement',
function () { return this.nodeType === 1; });
进行测试
答案 1 :(得分:0)
您可以添加一个具有您的函数作为getter的属性:
Object.defineProperty(Node.prototype, "isElement", {
get: function() {
var result = this.nodeType == 1;
return result;
}
});