Как связать функции с объектом JSON? - PullRequest
1 голос
/ 14 октября 2010
function Person(_name, _id, _salary){
    this.Name = _name;
    this.Id = _id;
    this.Salary = _salary;
}

Person.prototype.f_IncreaseSalary = function( _percentage ){
    this.Salary *= _percentage;
}

var per = new Person("cem",10,15000);

1) Я могу получить доступ к per.f_IncreaseSalary(0.2), но что если я создаю этот объект из строки JSON, как я могу получить доступ к функции f_IncreaseSalary?

var sPer = {"Person" : {"Name":"Cem", "Id":10, "Salary":15000} };
sPer.f_IncreaseSalary(0.2); // it won't! 

2) Как создать объект sPer с функциями класса Person?

3) Как я могу понять, sPer имеет f_IncreaseSalary функцию?

Ответы [ 3 ]

2 голосов
/ 14 октября 2010

Ваш прототип Person и объект JSON, который имеет свойство Person, совершенно не связаны. Вам нужно явно создать новый объект с new Person(...) и данными из объекта JSON:

var sPer = {"Person" : {"Name":"Cem", "Id":10, "Salary":15000} };
var per = new Person(sPer.Person.Name, sPer.Person.Id, sPer.Person.Salary);
per.f_IncreaseSalary(0.2);
1 голос
/ 14 октября 2010

Чтобы ответить на ваш вопрос:

JSON - это аббревиатура от Javascript Object Notation, которая, как правило, после создания объекта из строки JSON у вас есть объект со свойствами.

Итак, для вашего примера,

var sPer = {"Person" : {"Name":"Cem", "Id":10, "Salary":15000} };

Вы создаете литерал объекта, который не идентичен вашему Person объекту (который вы объявили). Ваш sPer в основном позволяет вам сделать это ...

// Изменение значений в Javascript;

sPer.Salary = 100000;
sPer.Name = "John";
sPer.Id = 200;

У него не будет функции:

Person.prototype.f_IncreaseSalary = function( _percentage ){
    this.Salary *= _percentage;
}

Поскольку вы не можете создавать функции в JSON.

Надеюсь, это поможет.

1 голос
/ 14 октября 2010

Литерал объекта, который вы создаете, является , а не объектом Person.Это неназванный объект со свойством Person, свойства которого такие же, как у вашего объекта person.

var personData = sPer.Person;
var p = new Person( personData.Name, personData.Id, personData.Salary);
p.f_IncreaseSalary(0.2)
...