0

したがって、Javascriptでオブジェクトを次のように宣言すると、次のようになります。

var myhouse = {
    room: {
        bed: function() { return "sleep"; }
    }
}

私は呼び出すことができます:

myhouse.room.bed();

次のコマンドだけで呼び出し可能なメソッドを作成できますか?

myhouse.room();

?私はただ言うことはできません:

var myhouse = {
    room: {
        function() { return "stuff"; },
        bed: function() { return "sleep"; }
    }
}

無効です。だから私は何が欠けていますか?これを行うのも良い考えですか?

4

2 に答える 2

2

関数もオブジェクトであることがわかっている場合は、このような構文を使用できます。

var room = function() { return "stuff"; }
room.bed = function() { return "sleep"; };

var myhouse = { room: room };
myhouse.room(); // stuff
myhouse.room.bed(); // sleep

または

var myhouse = { room: function() { return "stuff"; } };
myhouse.room.bed = function() { return "sleep"; };
myhouse.room(); // stuff
myhouse.room.bed(); // sleep
于 2012-08-23T08:27:14.050 に答える
2

単一のリテラルでそれを行うことはできません。関数にプロパティを設定するには、追加の割り当てが必要です。

var myhouse = {
    room: function() { return "stuff"; }
};
myhouse.room.bed = function() { return "sleep"; };

単一の式にするために、IEFEを使用することができます

var myhouse = {
    room: (function(){
        var room = room = function() { return "stuff"; }
        room.bed = function() { return "sleep"; };
        return room;
    })()
};

またはコンマ演算子(ひどく読めないが、機能している):

var myhouse = {
    // using myhouse as an already declared variable
    room: (myhouse = function() {return "stuff";},
           myhouse.bed = function() {return "sleep";},
           myhouse)
};
于 2012-08-23T08:28:57.107 に答える