我想了解幕后的工作原理:https://learn.jquery.com/using-jquery-core/faq/how-do-i-pull-a-native-dom-element-from-a-jquery-object/
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函数。有没有办法说每当进行数组查找时,执行一个函数?
答案 0 :(得分:4)
这是因为在jQuery 0
中是包含DOMElement的对象中属性的键。这意味着您实际上是按键访问对象,而不是按索引访问数组。 get()
方法只是该访问器的包装器。这是一个有效的例子:
var obj = {
'0': 'hello!',
get: function(key) {
return this[key];
}
};
console.log(obj[0]);
console.log(obj.get(0));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:3)
JQuery如何设置foo [0]来执行get函数
反过来说。 get(0)
只需拨打[0]
。
jQuery创建了一个类似于数组的元素对象的堆栈,因此,对于extraxt,你可以使用数组语法,例如: [0]
。
答案 2 :(得分:0)
在意识到JQuery方法对我不起作用之后,因为我想在调用时执行代码,我找到了使用Proxy对象的解决方案:
var p = new Proxy(Obj, {
get(target, name, receiver) {
console.log(name);
return name;
}
});
p[0]
将打印0
并允许在函数内执行代码。我不确定这是否适用于所有浏览器,但这适用于节点项目。