[英]Javascript array notation on object
我想知道這是如何在幕后工作的: https : //learn.jquery.com/using-jquery-core/faq/how-do-i-pull-a-native-dom-element-from-a -jquery對象/
JQuery如何設置foo[0]
來執行get
函數。 我看了一下源代碼,但我找到的只是這個:
get: function( num ) {
return num != null ?
// Return just the one element from the set
( num < 0 ? this[ num + this.length ] : this[ num ] ) :
// Return all the elements in a clean array
slice.call( this );
},
我如何自己的對象,以便訪問數組索引調用這樣的函數?
我想做同樣的事情:
myObj[0];
行為與...相同
myObj.get(0);
看JQuery這一定是可能的,因為它不僅手動為每個索引設置this[0] = 'whatever'
,它以某種方式執行.get函數。 有沒有辦法說每當進行數組查找時,執行一個函數?
這是因為在jQuery 0
是包含DOMElement的對象中屬性的鍵。 這意味着您實際上是按鍵訪問對象,而不是按索引訪問數組。 get()
方法只是該訪問器的包裝器。 這是一個有效的例子:
var obj = { '0': 'hello!', get: function(key) { return this[key]; } }; console.log(obj[0]); console.log(obj.get(0));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
JQuery如何設置foo [0]來執行get函數
反過來說。 get(0)
只需調用[0]
。
jQuery創建了一個類似於數組的元素對象的堆棧,因此,對於extraxt,你可以使用數組語法,例如[0]
。
在意識到JQuery方法對我不起作用之后,因為我想在調用時執行代碼,我找到了使用Proxy對象的解決方案:
var p = new Proxy(Obj, {
get(target, name, receiver) {
console.log(name);
return name;
}
});
p[0]
將打印0
並允許在函數內執行代碼。 我不確定這是否適用於所有瀏覽器,但這適用於節點項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.