如何将函数绑定到JSON对象?

时间:2010-10-14 11:09:07

标签: javascript json hasownproperty

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)如何创建具有Person类功能的sPer对象?

3)我如何理解sPerf_IncreaseSalary功能?

3 个答案:

答案 0 :(得分:2)

您的Person原型和具有属性Person的JSON对象完全不相关。您需要使用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 :(得分:1)

您正在创建的对象文字是一个Person对象。它是一个未命名的对象,其属性为“Person”,其属性与您的person对象相同。

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

答案 2 :(得分:1)

回答你的问题:

JSON是Javascript Object Notation的首字母缩写,基本上,一旦从JSON String创建对象,就会有一个具有属性的对象。

所以对你的例子来说,

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中创建函数。

希望这有帮助。