2010-01-13 6 views
2

Знание Javascript менее опытно, поэтому я могу использовать неправильные описания в следующем.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; 
... 

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

Object doesn’t support this property or method

Удаление 'это' из результатов ошибки this.methodB ('Test'):

Object expected

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

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

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

+0

Почему это не работает? Какое сообщение об ошибке вы получаете? В противном случае, какое поведение вы видите? –

+0

Я добавил подробности об ошибках, которые я получаю. – Chau

ответ

4

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

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

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

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

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

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

+0

Изменение этого.метод B ('test') для прямого вызова методаC ('test') работает, поэтому моя реализация методаC (value) должна работать. Я знаю, как отлаживать переменные, но как отлаживать функции/методы, я еще не понял :) – Chau

+0

Как я могу увидеть это «в инструменте разработчика IE? – Chau

+0

@Alsciende: В Firebug я вижу переменную 'this'. Но в инструменте разработчика IE мне нужно использовать консоль и написать что-то вроде: var a = this; Тогда «это» видно среди других локальных переменных. – Chau

Смежные вопросы