json和绑定方法

时间:2010-10-14 08:55:19

标签: javascript json webservice-client overloading

我有像

这样的Person javascript类
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;
}

我现在正在做的是:

  1. new Person('cem','1000','15000')
  2. 等网络​​服务发送字符串
  3. 在客户端评估字符串,如:

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

  4. 并使用javascript对象及其功能。 globalObj.f_IncreaseSalary(0.2);
  5. 但我想我应该在json中返回字符串,如:  "Person" : {"name":"Cem", "id":1000, "salary":15000 }

    如何将Person类的javascript方法绑定到json对象...?

1 个答案:

答案 0 :(得分:2)

ECMA- / Javascript中不可能“重载”这样的方法/函数。

一个好的解决方法是检查arguments对象,比如

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.org中的json2.js来提供相同的功能。