Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript框架可以';我不真正在内部调用方法_Javascript_Plugins_Frameworks - Fatal编程技术网

Javascript框架可以';我不真正在内部调用方法

Javascript框架可以';我不真正在内部调用方法,javascript,plugins,frameworks,Javascript,Plugins,Frameworks,我一直在尝试模仿jQuery的一些语法来制作一个小得多的插件。我在内部使用$object的方法已经有一段时间了。让我举例说明: (function() { window.$ = function (element) { return new Plugin(element); }; var Plugin = function (element) { this.element = element; }; Plugin.pro

我一直在尝试模仿jQuery的一些语法来制作一个小得多的插件。我在内部使用$object的方法已经有一段时间了。让我举例说明:

(function() {
    window.$ = function (element) {
        return new Plugin(element);
    };

    var Plugin = function (element) {
        this.element = element;
    };

    Plugin.prototype = {
        foreach: function(callback) {
            // Of course the "foreach" function will be bigger than this, this is just for testing.
            var values = [];
            for (i = 0; i < this.element.length; i++) {
                values[i] = callback.call(this, this.element[i], i);
            }

            return values;
        },
        someOtherFunctionThatUsesForeachInternally: function() {
            var arr = [];
            $([6, 32, 2]).foreach(function(item, key) {
                arr[key] = item + 7;
            });
            return arr;
        }
    };
})();

/* Desired result: 
[
    [13, 39, 9],
    [13, 39, 9],
    [13, 39, 9],
    [13, 39, 9]
]
*/

var arr = [1, 5, 7, 9];
var test = [];

$(arr).foreach(function(value, key) {
    test[key] = this.someOtherFunctionThatUsesForeachInternally();
});

console.log(test);
(函数(){
窗口。$=函数(元素){
返回新插件(元素);
};
var Plugin=函数(元素){
this.element=元素;
};
Plugin.prototype={
foreach:函数(回调){
//当然“foreach”函数会比这个大,这只是为了测试。
var值=[];
对于(i=0;i
只要美元符号与参数(例如数组,在本例中为
var arr=[1,5,7,9]
)结合使用,就会实例化一个新的插件对象,然后立即调用一个方法

我编写了一个小的
foreach
进行测试,但似乎无法从框架内的函数调用它<代码>控制台日志(测试)将输出[[13,39,9]],而不是对var arr的每个元素进行输出。我想这是因为
在内部调用foreach时会覆盖此


关于如何解决此问题,您有什么想法吗?

您的
foreach
方法中的
for
循环索引(
i
)正在被覆盖,因为您已经在全局范围内声明了它。始终使用
var
声明变量:

for (var i = 0; i < this.element.length; i++) {
    values[i] = callback.call(this, this.element[i], i);
}
for(var i=0;i

演示:

@user2180613很难找到:)一切看起来都很好,所以我不明白为什么它不起作用。然后我随机意识到
var
不存在,添加了它并再次尝试,结果成功了:)养成通过JShint转储代码的习惯是在这类错误变成实际问题之前捕获它的好方法。