2

オブジェクトリテラルの基礎を理解しようとしています

window.Test = ({
    attribute1:'This is',
    attribute2:'a test',
    function1: function(){
        alert(this.attribute1 + ' ' + this.attribute2);
    }
});

//TEST 1
Test.function1(); // "This is a test"

//TEST 2
var tester = new Test(); //ERROR: Object is not a function
tester.function1();

私が正しく理解していれば、ウィンドウオブジェクトwindow.Test =にグローバル変数が作成されます。と同じでしょう。したがって、TEST1 が機能するのは論理的です。var Test =

TEST2 でリテラルをインスタンス化しようとしましたが、これは変数であるため不可能です。次のコードが機能する Backbone.js からアイデアを得ました。

window.Product = Backbone.Model.extend({});
var p = new Product();

ここでも Product が変数であると予想されるため、インスタンス化する方法はありません。

バックボーンの例と私の例の違いを説明できる人はいますか? リテラルの基本的な理解を見逃しているようです。

4

3 に答える 3

3

まず、これは JSON とは関係ありません。これは、オブジェクトを表すためのテキスト形式です。あなたが持っているのは、Javascript のオブジェクト リテラルです。JSON 形式は Javascript 構文に基づいていますが、同じではありません。

既にインスタンスであるため、オブジェクト リテラルをインスタンス化することはできません。

バックボーンextendメソッドが行うことは、オブジェクトを作成する関数を作成することです。このメソッドは、オブジェクトのすべてを独自extendのオブジェクトにコピーするため、インスタンスの作成に使用できる関数を返します。Model

于 2013-06-14T09:33:19.483 に答える