Javascript заменить функцию новой, содержащей динамическое содержимое - PullRequest
2 голосов
/ 13 января 2010

Мои знания Javascript менее опытны, поэтому я могу использовать неправильные описания в следующем.

У меня есть объект в статическом файле .js:

var Info = {
    methodA: function() {
        // Call methodB.
        this.methodB('test');
    },

    methodB: function(value) {
        // Do stuff
    }
}

Теперь в файле .aspx я создаю функцию methodC (значение) с различным содержанием (в зависимости от некоторых данных), которую я хочу вставить вместо приведенного выше определения methodB (значение):

...
var methodC = function(value) {
    // Do different stuff
}
...

Моя идея до сих пор состояла в том, чтобы заменить methodB на methodC следующим образом:

...
Info.methodB = methodC;
...

Используя встроенный инструмент разработки IE, я получаю следующую ошибку при вызове this.methodB ('test'); из Info.methodA ():

Объект не поддерживает это свойство или метод

Удаление «this» из this.methodB («test») приводит к ошибке:

Ожидаемый объект

Я не получаю никаких ошибок при использовании FireBug - возможно, потому что я использую различные фреймворки, которые могут перехватить ошибку.

Как мне это сделать или я должен использовать совершенно другой подход?

С уважением, Каспер

1 Ответ

4 голосов
/ 13 января 2010

Это должно работать, вы делаете это правильно. Проблема лежит в другом месте.

обновление: Это все равно должно работать, пока вы вызываете methodA для объекта, например, Info.methodA ().

Может быть, вы не понимаете сообщения об ошибках?

«Объект не поддерживает это свойство или метод» означает, что в выражении «this.methodB ()» это не имеет свойства с именем «methodB». Таким образом, это означает, что этот не является Info , когда выполняется код methodA .

«Ожидаемый объект» означает, что переменная methodB неизвестна в текущем контексте выполнения. Конечно, так как methodB никогда не является переменной, только свойство Info .

Чтобы отладить вашу проблему, вам нужно знать, что это при выполнении кода, и почему это не то, что, как вы думаете, должно быть. Когда вы вызываете Info.methodA () , , это устанавливается равным Info , когда methodA начинает свое выполнение.

...