1
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功能?

4

3 回答 3

2

您的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);
于 2010-10-14T11:15:18.653 回答
1

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

var personData = sPer.Person;
var p = new Person( personData.Name, personData.Id, personData.Salary);
p.f_IncreaseSalary(0.2)
于 2010-10-14T11:16:25.680 回答
1

要回答您的问题:

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

希望这可以帮助。

于 2010-10-14T11:20:08.773 回答