代码之家  ›  专栏  ›  技术社区  ›  uzay95

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

  •  1
  • uzay95  · 技术社区  · 15 年前
    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);
    

    (一) 我可以访问 per.f_IncreaseSalary(0.2)

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

    2个) 如何创建具有Person类功能的sPer对象?

    三) 我怎么能理解 sPer 有 f_IncreaseSalary

    3 回复  |  直到 15 年前
        1
  •  2
  •   RoToRa    15 年前

    你的 Person prototype和具有属性的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);
    
        2
  •  1
  •   Josh Smeaton    15 年前

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

    var personData = sPer.Person;
    var p = new Person( personData.Name, personData.Id, personData.Salary);
    p.f_IncreaseSalary(0.2)
    
        3
  •  1
  •   Buhake Sindi Tesnep    15 年前

    回答你的问题:

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

    希望这有帮助。