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」は「undefined」を返します。「未定義」を返す理由は理解していますが、「isElement()」が呼び出されない場合に「true」または「false」を返す方法を知りたいです。

私はそれを次のように使いたいだけです:

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

しかし、好きではありません:

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

答えを待っています、ありがとう。

4

2 に答える 2

1

コメントで述べたように、JavaScript 言語は、DOM 実装が標準の JS オブジェクト機能を提供することを保証しません。

つまり、環境が常にこれらをサポートしていると判断した場合、この場合はゲッターが呼び出され、特定のプロパティ値が要求されるたびに呼び出される関数を効果的に作成できます。

詳細については、 MDNを参照してください。

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

http://jsfiddle.net/L5hBq/でブラウザでテストします

于 2012-12-17T06:58:42.977 に答える
0

ゲッターとしての機能を持つプロパティを追加できます。

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