对象上的Javascript数组表示法

时间:2016-07-01 11:12:42

标签: javascript jquery

我想了解幕后的工作原理: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函数。有没有办法说每当进行数组查找时,执行一个函数?

3 个答案:

答案 0 :(得分:4)

这是因为在jQuery 0中是包含DOMElement的对象中属性的键。这意味着您实际上是按键访问对象,而不是按索引访问数组。 get()方法只是该访问器的包装器。这是一个有效的例子:

&#13;
&#13;
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;
&#13;
&#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并允许在函数内执行代码。我不确定这是否适用于所有浏览器,但这适用于节点项目。