0

我定义了 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”返回“未定义”。我理解为什么它返回“未定义”,但我想知道当“isElement()”从不被调用时如何让它返回“真”或“假”。

我只想像这样使用它:

if(dom1.isElement){//do something}

但不喜欢:

if(dom1.isElement()){//do something}

等待答案,谢谢。

4

2 回答 2

1

正如评论中提到的,JavaScript 语言不保证 DOM 实现提供标准的 JS 对象工具。

也就是说,如果您确定您的环境始终支持这些,那么在这种情况下调用 getter,您可以有效地编写一个函数,该函数在请求特定属性值时调用。

有关详细信息,请参阅MDN

Node.prototype.__defineGetter__('isElement', 
  function () { return this.nodeType === 1; });

使用浏览器在http://jsfiddle.net/L5hBq/进行测试

于 2012-12-17T06:58:42.977 回答
0

您可以添加一个具有您作为 getter 的功能的属性:

Object.defineProperty(Node.prototype, "isElement", {
    get: function() {
        var result = this.nodeType == 1;
        return result;
    }
});
于 2012-12-17T06:43:08.323 回答