对象上的Javascript数组表示法

对象上的Javascript数组表示法,javascript,jquery,Javascript,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 th

我想知道这在幕后是如何运作的:

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.get(0);

查看JQuery时,这必须是可能的,因为它不只是手动为每个索引设置
this[0]=“whatever”
,而是以某种方式执行.get函数。有没有一种方法可以说,无论何时进行数组查找,都要执行一个函数

这是因为在jQuery中
0
是保存domeElement的对象中属性的键。这意味着您实际上是通过键访问对象,而不是通过索引访问数组。
get()
方法只是该访问器的包装器。下面是一个工作示例:

var obj={
“0”:“你好!”,
获取:函数(键){
返回此[键];
}
};
console.log(obj[0]);
控制台日志(obj.get(0))
JQuery如何设置foo[0]来执行get函数

相反<代码>获取(0)
只需调用
[0]


jQuery创建了一个类似于数组的元素对象堆栈,因此,为了扩展一个元素对象,可以使用数组语法,例如,
[0]

在意识到jQuery方法对我不起作用后,我想在调用中执行代码,我找到了一个使用代理对象的解决方案:

var p = new Proxy(Obj, {
   get(target, name, receiver) {
    console.log(name);
    return name;
   }
});
p[0]
将打印
0
并允许在函数内执行代码。我不确定这是否适用于所有浏览器,但这适用于节点项目

var p = new Proxy(Obj, {
   get(target, name, receiver) {
    console.log(name);
    return name;
   }
});