How to use JSON to create object that Inherits from Object Type?

前端 未结 3 1072
忘了有多久
忘了有多久 2021-02-02 00:33

I know how to use JSON to create objects, but there doesn\'t seem to be away to use JSON to create an object that is of a specific object type.

Here\'s an example of an

相关标签:
3条回答
  • 2021-02-02 01:04

    You could allow new Person() to accept an object to populate attributes with as a parameter.

    var you = new Person({ firstName: 'Mike' });
    
    0 讨论(0)
  • 2021-02-02 01:13

    I don't imagine so. I'd create a function on the Person class to initialise from a JSON object if I were you.

    function Person() {
        this.loadFromJSON = function(json) {
            this.FirstName = json.FirstName;
        };
    }
    

    If you didn't know what class the JSON object was representing beforehand, perhaps add an extra variable into your JSON.

    { _className : "Person", FirstName : "Mike" }
    

    And then have a 'builder' function which interprets it.

    function buildFromJSON(json) {
        var myObj = new json["_className"]();
        myObj.loadFromJSON(json);
        return myObj;
    }
    

    Update: since you say the class is part of a third-party library which you can't change, you could either extend the class with prototyping, or write a function which just populates the class externally.

    eg:

    Person.prototype.loadFromJSON = function(json) {
        // as above...
    };
    

    or

    function populateObject(obj, json) {
        for (var i in json) {
            // you might want to put in a check here to test
            // that obj actually has an attribute named i
            obj[i] = json[i];
        }
    }
    
    0 讨论(0)
  • 2021-02-02 01:16

    You can derive an object from theirs. Your constructor can accept the object you want, but call their constructor in an unaffected fashion:

    function yourWrapper(obj) {
        theirObject.call(this);
        for (var s in obj) {
            this[s] = obj[s];
        }
    }
    yourWrapper.prototype = new theirObject();
    

    Or something like that :)

    0 讨论(0)
提交回复
热议问题