2010-10-14 78 views
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函數?如何將函數綁定到JSON對象?

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

2)如何創建具有Person類的功能SPER對象?

3)我怎麼理解sPerf_IncreaseSalary函數?

回答

2

你的Person原型和JSON對象有一個屬性Person是完全無關的。你需要從JSON對象明確創建new Person(...)一個新的對象和數據:

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

對象常量要創建爲 Person對象。它是屬性爲「Person」的未命名對象,其屬性與人物對象相同。

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

要回答你的問題:

JSON是JavaScript對象符號,基本上,一旦你創建一個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創建功能。

希望這會有所幫助。