Как установить прототип для объекта JSON? - PullRequest
4 голосов
/ 04 ноября 2010

Я получаю некоторый объект JSON с сервера, и я хочу «typecast» или «благословить» его для объекта с уже определенными методами. Есть ли способ установить прототип для простого объекта JSON?

function MyClass(someValue) {
    this.myProperty = someValue;
}

MyClass.prototype.someMethod = function() { return "Here's " + this.myProperty + "!"};

var json = {myProperty : 'someValue'};

// ??? json.prototype = MyClass doesn't work, of course.

var result = json.someMethod();

Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 04 ноября 2010

Ну, я могу предложить попробовать это:

  • Добавление необходимых функций ко всем объектам Javascript (плохая практика)

    Object.prototype.lol = function() { alert(this.a); };
    var x = {a : 'b'};
    x.lol();
    
  • Расширяя JSON с помощью функции:

    var json = {a : 'b', b : 123};
    function extend(obj) {
        obj.func1 = function(param) {
            alert(this[param]);
        }
    }
    extend(json);
    json.func1('b');
    
  • Путем «превращения» объекта в функцию:

    var json = {a : 'b', b : 123};
    function extendToFunc(obj) {
        var theLibrary = function(obj) {
            /**
             * The same as above.
            */
            this.func1 = function(param) {
                 alert(obj[param]);
            }
        };
        return new theLibrary(obj);
    }
    var jsonFunc = extendToFunc(json);
    jsonFunc.func1('b');
    

Или вы можете использовать для этого JS-фреймворк. Или любой другой метод, который вы можете придумать :) Мои примеры просты, их можно расширить до всего, что вам нужно.

1 голос
/ 04 ноября 2010

OK.Вот ответ (который несовместим с IE):

json.__proto__ = MyClass.prototype;

К счастью, мне не нужно использовать% $ @ $% # IE в моем приложении.

(Когда я это делаю, есть еще одна возможность: создать функцию-обертку в прототипе MyClass, которая копирует все свойства из JSON в новый объект (достаточно мелкого копирования).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...