簡體   English   中英

在javascript中測試對象是否是jQuery對象的正確/正確方法是什么?

[英]What's the correct/proper way to test if an object is a jQuery object in javascript?

我正在編寫一個javascript函數,並且在“緊湊”的javascript設計方式中,參數的類型/長度會改變函數的行為。 一個可能的參數類型是一個jQuery對象,我想要非常特殊的邏輯。

測試對象是否是jQuery實例的最佳方法是什么?

取決於jQuery的內部工作原理,但我會選擇

obj instanceof jQuery

這是實現它的最“JavaScript方式”。 請記住,在窗口/框架邊界之間傳遞對象時會失敗!

托馬拉克的建議

'jquery' in obj

在這種情況下應該仍然可以工作,所以如果你希望進行多窗口數據交換,你應該使用它。 我不推薦它作為一般解決方案,因為只是尋找名為'jquery'的屬性並不是非常可靠。

如果obj是原語, in運算符也會拋出錯誤。 如果不希望出現此行為,您可以考慮使用以下測試之一:

obj && obj.jquery
'jquery' in Object(obj)

我發現第二個更吸引人,但第一個可能會更快。

檢查

Object(obj).hasOwnProperty('jquery')

將失敗,因為jQuery對象只從其原型繼承屬性。

我也不鼓勵在JavaScript中使用constructor屬性進行類型檢查 - 它可能對jQuery可靠地工作,但由於constructor只是構造函數在實例化時的prototype屬性所指向的對象的屬性,因此有很多方法可以搞亂了這樣的測試......


作為旁注:

jQuery本身檢查obj && obj.jquery 它甚至不使用instanceof一次。 相反,它使用typeof ,duck-typing和toString.call()進行類型檢查,這應該在instanceof失敗的instanceof工作。

此外,從不使用hasOwnProperty() 我不確定這說明jQuery庫的代碼質量;)

以下之一:

obj instanceof jQuery
obj && obj.constructor == jQuery
obj && obj.jquery 

建議使用 instanceof

使用this而不是instanceof來測試jQuery對象。

/**
 * @see http://ajaxian.com/archives/working-aroung-the-instanceof-memory-leak
 * @return Boolean True if object is of type jQuery, false otherwise
 */
function isjQuery(obj) {
    return obj && obj.hasOwnProperty && obj instanceof jQuery;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM