Я пытался подражать некоторым синтаксисом jQuery для гораздо меньшего плагина. Я уже давно пытаюсь использовать методы объекта $ внутри. Позвольте мне проиллюстрировать:Javascript framework не может действительно вызывать методы изнутри
(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);
Новый объект Plugin инстанциируется всякий раз, когда знак доллара используется в сочетании с аргументом (например, массив, в примере это будет var arr = [1, 5, 7, 9]
) и метод немедленно вызывается после того, что ,
Я написал небольшой файл foreach
для тестирования, но его невозможно вызвать из функции внутри рамки. console.log(test);
в самом конце будет выводить [[13, 39, 9]] вместо того, чтобы делать это для каждого элемента var arr. Я думаю, это потому, что перезаписывается, когда foreach называется внутренне.
Любые идеи относительно того, как решить эту проблему?
Черт! Так просто – user2180613
@ user2180613 Было больно найти :) Все выглядело хорошо, поэтому я не понимал, почему это не сработает. Затем я случайно понял, что «var» там не было, добавил его и попробовал еще раз, и он сработал :) – Ian
Получение привычки сбрасывать код через JShint - хороший способ поймать эту ошибку, прежде чем она превратится в актуальная проблема. – Racheet