views:

45

answers:

3
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) I can access to per.f_IncreaseSalary(0.2) but what if i create this object from JSON string how can i access f_IncreaseSalary function?

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

2) How can i create sPer object which has functions of Person class?

3) How can i understand sPer has f_IncreaseSalary function?

+1  A: 

Your Person prototype and the JSON object which has a property Person are completely unrelated. You'll need to explicitly create a new object with new Person(...) and the data from the JSON object:

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);
RoToRa
+1  A: 

The object literal you are creating is not a Person object. It is an unnamed object with the property 'Person' that has properties that are the same as your person object.

var personData = sPer.Person;
var p = new Person( personData.Name, personData.Id, personData.Salary);
p.f_IncreaseSalary(0.2)
Josh Smeaton
+1  A: 

To answer your question:

JSON is an acronym of Javascript Object Notation, which basically, once you create an object from a JSON String, you have an object with properties.

So for your example,

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

You are creating an object literal which is not identical to your Person object (that you declared). Your sPer basically allows you to do this...

//Changing values in Javascript;

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

It won't have the function:

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

As you cannot create functions in JSON.

Hope this helps.

The Elite Gentleman