Javascript库每个循环元素

时间:2016-01-03 16:52:04

标签: javascript

我有疑问。我有自己的jquery类库。我称$或Meh(这就是所谓的Mehlib)和参数传递选择器。该库调用document.querySelectorAll,返回nodeList。要使用此列表中的元素(节点)(我的意思是,为它们调用方法)我必须循环它们。我已经想到了这样:

$('.selector-class').each(function (el) {
    el.style.display = 'none'; // hide element
});

Meh.fn = Meh.prototype = {
    map: function (callback) {
        var match = [];
        for (var i = 0; i < this.length; i++) {
            push.call( match, callback.call( this, this[i], i ) );
        }

        return match;
    },

    each: function (callback) {
        return this.map(callback);
    }
};

所以,这很好用,但让我们认为自己懒得好吗? 我想在循环(映射)到this时“保存”当前元素并返回它。所以电话会议(上面的前3行)就是这样的:

$('.selector-class').each(function () {
    this.style.display = 'none';
});

所以我仍然希望在映射节点时调用回调函数,但我不想将单个映射元素保存到回调的函数参数

我试图在map方法中创建新的库实例,并且当前方法保存映射的重复单个节点,例如this = duplicated[i];,但是有一个未被捕获的错误:Uncaught reference error: Invalid left-hand side in assignmentUncaught reference error: $ is not defined错误。

2 个答案:

答案 0 :(得分:0)

您不会分配到this

但是,您可以在调用函数的上下文中定义this

即:

someObject.someMethod(); // "this" is someObject
someFunction(); // "this" is typically "window" but may be "null"

someFunction.call(someThing, arg1, arg2); // "this" is someThing

在最后一个中,你在调用函数时提供了你想要的任何内容this

答案 1 :(得分:0)

变化:

callback.call( this, this[i], i )

要:

callback.call( this[i], this[i], i )

这样您就可以将元素作为thisArg传递。