Есть ли способ добавить метод в объект JSON? - PullRequest
5 голосов
/ 29 июля 2010

Есть ли способ добавить метод в объект JSON?

Ответы [ 4 ]

13 голосов
/ 29 июля 2010

Да. Функции Javascript являются объектами первого класса, что означает, что вы можете присоединять их к другим объектам в качестве свойств.

var myJson = { one: 1, two: 2 };

myJson.Sum = function() { return this.one + this.two; };

var result = myJson.Sum(); // result == 3
1 голос
/ 17 августа 2012

Все зависит от того, как вы его используете.

Используя функцию Томаса, фактически сохраняющую сумму для КАЖДОГО объекта, вы также присоединяете его.

Если вы сохраните функцию где-то еще до того, как вставить ее в свой объект, вы будете использовать меньше памяти.

Плохой:

var array = [];
for (i=0; i<100000; i++)
   array[i] = { test: function(){ "A pretty long string" }; }

Хороший:

var array = [],
    long = function(){ "A pretty long string"; };
for (i=0; i<100000; i++)
   array[i] = { test: long }

В моих тестах хороший получил дополнительно ~ 3 МБ, плохой - ~ 20 МБ. Это происходит потому, что вы храните только 100000 ссылок на функцию вместо 100000 анонимных функций.

Подход, на который вы ссылаетесь (основанный на прототипе) в вашем комментарии, может быть закодирован следующим образом:

function wrapper(data){
   for (i in data)
      this[i] = data[i];   // This is a fast hack
   // You will probably want to clone the object, making sure nested objects and array
   // got cloned too. In this way, nested objects and array will only get their 
   // reference copied inside this
}
wrapper.prototype.test = function(){
   "A pretty long string";
}

  var array = [];
    for (i=0; i<100000; i++)
       array[i] = new wrapper({})

Память примерно такая же, как и у Хорошего, который я написал ранее, но имеет то преимущество, что мы не загрязняем наш объект именем функции (в нашем примере - test).

Недостатками в основном являются длина, необходимость копировать наши данные и «хак», используемый для копирования (что может быть допустимо в некоторых проектах и ​​совершенно ужасно в других).

0 голосов
/ 25 февраля 2016

Это просто ....

var FillCbo =JSON.parse( '{"Category":""}');
FillCbo.Category = CboCategory;

Теперь метод Implimentation

function CboCategory(PCboName)
{
    Alert(PCboName);
}

Теперь вы можете использовать FillCbo.Category () как метод в любом месте страницы

FillCbo.Category("How Are Youu...");
0 голосов
/ 13 марта 2013

Да, как и любой другой объект:

Из консоли Chrome:

> JSON.myMethod = function(x) { console.log(x); }
function (x) { console.log(x); }
> JSON.myMethod("hello")
hello
undefined
...