3

JS では、次のように関数内に関数を作成できることが知られています。

function digit() { return 9 };
digit.five = function() { return 5 };

digit();     // 9
digit.five() // 5

それが悪い慣習であるかどうかはわかりません (おそらくそうです)。適切に機能するので、使用してもかまいません。

しかしdigit()、あるオブジェクトのメソッドとして関数があるとしたらどうでしょうか (以下の例を参照)。
では、どのように宣言しdigit.five()ますか? のスコープで宣言したいとしますobj

var obj = {
    digit: function() { return 9 },
 // digit.five: … ???
 // digit["five"]: … ???
}

obj.digit();     // 9
obj.digit.five() // 5

obj.digitFive()新しいメソッドを作成せずにそれはまったく可能ですか?


PS: ユーザーnnnnnn は、 内に属性を作成できると言っています :obj.digit()

var obj = {
    digit: function () {
        return 9;
        obj.digit.five = function () { return 5 };
    }
}

これが唯一の方法ですか?

4

3 に答える 3

3

関数式にプロパティを配置するための組み込み構文はありません。後でプロパティを追加できます。

var obj = {
    digit: function() { return 9 },
};

obj.digit.five = function() { return 5 };

ES6 の標準機能Object.assignもうまく機能します。

var obj = {
    digit: Object.assign(
        function() { return 9 },
        { five: function() { return 5 } }
    ),
};
于 2015-12-19T03:56:44.967 に答える
2

それがあなたの質問に答えるかどうかはわかりませんが、これを行うことができます:

var obj = {
    digit: function() { return 9 },
 // digit.five: … ???
 // digit["five"]: … ???
}

obj.digit.five = function(){ return 5 }; 

obj.digit();     // 9
obj.digit.five() // 5
于 2015-12-19T03:56:57.200 に答える
0

覚えておいてください-JS関数はオブジェクトです:)

したがって、obj.digit.five属性を作成するには、最初に obj.digit 属性を宣言する必要があります (それは何でもかまいませんが、オブジェクトを定義する必要があります)。次に、この属性にキーを追加できます。

問題は、最初に作成せずに obj.digit.five を作成しようとするobj.digitと、「unfined」エラーが発生することです。

最初の例のように作成すると、匿名関数が作成され、キーdigitに割り当てられることに注意してください。digit他のソリューションを試して、次のような側でこの関数を作成できます。

var digit = function() {...};
digit.five = function() {...};
digit.otherproperty = 3;

そして、すべてのプロパティ/機能/などを割り当てます。それに、この作成された変数を次のように obj に割り当てます。

obj.digit = digit;
于 2015-12-19T04:02:49.017 に答える