0
我一直在試圖模仿一個小得多的插件jQuery的語法。我一直努力在內部使用$對象的方法一段時間。讓我說明:Javascript框架不能真的在內部調用方法
(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]
)和方法之後立刻稱爲。
我寫了一個小的foreach
來測試,但它似乎不可能從框架內的函數調用它。 console.log(test);
在最後會輸出[[13,39,9]],而不是爲var arr的每個元素執行。我想這是因爲在內部調用foreach時,this
被覆蓋。
有關如何解決此問題的任何想法?
該死!如此簡單 – user2180613
@ user2180613找到一切都很痛苦:)一切看起來不錯,所以我不明白爲什麼它不起作用。然後,我隨機地意識到'var'不在那裏,添加它並再次嘗試,並且它工作:) – Ian
通過JShint進入垃圾代碼的習慣是一種很好的方式來捕獲這類錯誤,然後它成長爲實際問題。 – Racheet