2010-10-14 38 views
1

我有一個Person JavaScript類像JSON和裝訂方法

function Person(_name, _id, _salary){ 
    this.Name = _name; 
    this.Id = _id; 
    this.Salary = _salary; 
} 

首先,我想重載與構造函數:

function Person(_person){ 
    this.Name = _person.Name; 
    this.Salary = _person.Salary; 
    this.Id = _person.Id; 
} 

但我無論做什麼,它進入第一個功能...!?

,我有一些功能,這個JavaScript類,如:

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

什麼我現在做的是:從Web服務

  1. 發送串像new Person('cem','1000','15000')
  2. 評估客戶端的字符串如:

    dataType:json, success:function(msg){ globalObj = eval(msg.d); },

  3. 並將javascript對象與其函數一起使用。 globalObj.f_IncreaseSalary(0.2);

但我想我應該JSON中返回一個字符串,如: "Person" : {"name":"Cem", "id":1000, "salary":15000 }

我怎麼能在人班組長的JavaScript方法綁定到JSON對象...?

回答

2

在ECMA-/Javascript中不可能「重載」這樣的方法/函數。

一個很好的解決方法是檢查參數對象,像

function Person(){ 
    if(typeof arguments[0] === 'object'){ 
     // addional checks 
     this.Name = arguments[0].Name; 
     this.Salary = arguments[0].Salary; 
     // etc. 
    } 
    else if(arguments.length === 2){ 
     this.Name = arguments[0]; 
     this.Salary = arguments[1]; 
     // etc. 
    } 
} 

我不認爲我明白你的第二個問題,「如何綁定的JavaScript方法,以JSON對象」。

無論如何,您需要將「json」字符串「解析」爲javascript對象。這可以通過在「現代」瀏覽器中使用window.JSON.parse(<jsonstring>)來完成。舊版瀏覽器(如IE7)需要www.json.orgjson2.js才能提供相同的功能。