13

JSON を使用してオブジェクトを作成する方法は知っていますが、JSON を使用して特定のオブジェクト タイプのオブジェクトを作成する方法はないようです。

オブジェクトとそのインスタンスの作成の例を次に示します。

Person = function() { };
Person.prototype = {
    FirstName: null,
    GetFirstName: function() {
        return this.FirstName;
    }
};

//Create an instance of the Person Object
var me = new Person();
me.FirstName = "Chris";
alert(me.GetFirstName()); //alert the FirstName property

ここで、JSON を使用して新しい Person オブジェクトを作成し、GetFirstName 関数が機能するようにします。

これが私がやろうとしているようなものです(しかし、このコードは機能しません):

var you = new Person() { FirstName: "Mike" };
// OR
var you = new Person{ FirstName: "Mike" };

JSONを使用して特定のタイプのオブジェクトを作成する方法はありますか?

更新: Person オブジェクトを使用した私のサンプルは、質問を単純化するためのものです。実際、インスタンスを作成する必要がある実際のオブジェクトのコンストラクターを変更することはできません。オブジェクトはサードパーティ ライブラリの一部です。

更新: 以下のいくつかの提案を使用して、オリジナルから継承するオブジェクトを作成し、そのコンストラクターで JSON を受け入れる方法を見つけることができました。これはきれいです!

personWrapper = function(obj){
    for(var o in obj){
        this[o] = obj[o];
    }
};
personWrapper.prototype = new Person();

var you = new personWrapper({FirstName: "Chris"});
alert(you.GetFirstName());
alert(you instanceof Person); // returns True - we are successfully inheriting from Person!
4

3 に答える 3

15

そうは思いません。私があなたなら、JSON オブジェクトから初期化する関数を Person クラスに作成します。

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

JSON オブジェクトが表すクラスが事前にわからない場合は、JSON に追加の変数を追加してください。

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

そして、それを解釈する「ビルダー」機能があります。

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

更新:クラスは変更できないサードパーティライブラリの一部であると言っているので、プロトタイピングでクラスを拡張するか、クラスを外部から入力するだけの関数を作成できます。

例えば:

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

また

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];
    }
}
于 2008-10-09T00:06:46.347 に答える
4

new Person() がオブジェクトを受け入れて、パラメーターとして属性を設定できるようにすることができます。

var you = new Person({ firstName: 'Mike' });
于 2008-10-09T00:09:11.037 に答える
2

彼らのオブジェクトからオブジェクトを派生させることができます。コンストラクターは必要なオブジェクトを受け入れることができますが、影響を受けない方法でそれらのコンストラクターを呼び出します。

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

またはそのようなもの:)

于 2008-10-09T04:03:51.017 に答える