Javascript框架不能真正在内部调用方法
Javascript framework can't really call methods internally
我一直在尝试为一个小得多的插件模仿一些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 arr = [1, 5, 7, 9]
)一起使用时,一个新的Plugin对象被实例化,并且在此之后立即调用一个方法。
我写了一个小的foreach
来测试,但似乎不可能从框架内的函数调用它。console.log(test);
在最后将输出[[13,39,9]],而不是对var arr的每个元素进行输出。我猜这是因为在内部调用foreach时覆盖了this
。
foreach
方法中的for
循环索引(i
)正在被覆盖,因为您已经在全局作用域中声明了它。总是使用var
来声明变量:
for (var i = 0; i < this.element.length; i++) {
values[i] = callback.call(this, this.element[i], i);
}
演示:http://jsfiddle.net/QhXa7/
相关文章:
- 如何在类内部调用类的方法
- 如何在更新面板内部调用/触发javascript函数<触发器>标签
- 在闭包内部调用父函数
- 在条件内部调用JQuery函数
- 方法不在另一个方法内部调用
- 在处理元素单击事件期间,在循环内部调用window.open()
- 在angularjs中的控制器内部调用multipe$http
- AngularJs:在内部调用$http或$resource时,让方法同步返回
- 在Javascript数组内部调用URL变量
- 在侦听器内部调用函数时出现问题(onClick)
- 如何使用Ajax内部调用JQuery在函数中获取返回值
- 在方法内部调用另一个方法 ReactJS
- Redux 操作创建者在另一个内部调用一个
- 在 ajax 内部调用 ajax
- 节点异步仅在 node-lambda 内部调用第一个函数
- 如何在内部异步函数完成运行后调用外部函数返回
- 节点.JS事件发射器 - 在内部调用方法
- 如何在内部调用快速导出方法
- Javascript框架不能真正在内部调用方法
- 将rails路由限制为只能在内部调用