我定義了一個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