javascript: приведение объекта, созданного с помощью eval - PullRequest
8 голосов
/ 24 февраля 2011

У меня есть набор классов javascript, которые я использую в своем приложении. В одном случае я хочу получить json из ответа ajax, форма которого соответствует одному из моих классов.

Я использую метод jquery parseJSON, чтобы выполнить eval для меня.

Единственная проблема в том, что теперь я хочу вызвать метод, определенный в моем классе, однако я знаю, что метод не существует в объекте eval'd.

Какой самый лучший способ сделать этот метод доступным для моего нового объекта. Есть ли способ «разыграть» его?

1 Ответ

6 голосов
/ 24 февраля 2011

Нет концепции приведения в JavaScript. Вместо этого вы можете изменить конструктор вашего класса так, чтобы он принимал простой объект. Как вы это сделаете, зависит от того, как вы настроили свой класс, но может просто включить поверхностную копию объекта в новый экземпляр класса:

var MyClass = function (obj) {
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        this[i] = obj[i];
    }
    // Other class initialisation code
};

Затем «бросьте» ваш объект так:

var result = new MyClass(someObject);

Если у вас есть несколько классов, которые требуют этого, вы можете предпочесть создать функцию extend, которая выполняет клонирование за вас (или, если вы используете jQuery, эта функция уже существует):

var extend = function (obj1, obj2) {
    for (var i in obj2) {
        if (!obj2.hasOwnProperty(i)) continue;
        obj1[i] = obj2[i];
    }
};

А потом «разыграть» вот так:

var result = new MyClass();
extend(result, someObject);
...