1

私はJavaScriptオブジェクトにかなり慣れていないので、変数の呼び出しについていくつかの説明を使用できます。bar 関数でテスト変数を呼び出そうとしています。これは可能ですか?もしそうなら、どうすれば正しくできますか?

var foo = {

    bar: function()
    {
        var test = 'Hello World';
    },

    speak: function()
    {
        // Log the Variable from above ^^
        console.log(foo.bar.test);
    }

};

ありがとう

4

4 に答える 4

2

いいえ; ローカル変数は、宣言関数の外部には表示されません。

代わりに、オブジェクトにプロパティを追加する必要があります。

foo.test = ...;

設定することもできfoo.bar.testます; これにより、関数オブジェクトにプロパティが追加されます。

于 2012-09-20T17:34:51.720 に答える
1

関数内でローカル変数を宣言するときは、それを関数の に追加しVariableEnvironmentます (基本的には外部LexicalEnvironmentとの違いはありませんが、ECMA はそれらを区別します)。関数には、LexicalEnvironmentそれが宣言されたスコープ (この場合はグローバル オブジェクトまたはwindow ) への参照があります。関数内から変数を参照しようとすると、エンジンは最初に関数のネイティブVariableEnvironmentを検索し、見つからない場合は外部を検索しLexicalEnvironmentます。あなたの場合、関数の外部から変数を参照しようとするため、エンジンは最初にグローバルオブジェクトのスコープで変数を検索します。

したがって、タスクを完了するには、外側のスコープで変数を宣言してから関数内で割り当てるか、オブジェクトに新しいプロパティを追加してから参照する必要があります。

var foo = {
    test: 'Hello world',
    speak: function()
    {
        console.log(this.test);
    }

};
于 2012-09-20T17:51:23.513 に答える
0

bar メソッドの呼び出し時に test を返すことで、test にアクセスできます。

var foo = {

    bar: function()
    {
        var test = 'Hello World';
       return test;
    },

    speak: function()
    {
        // Log the Variable from above ^^
        console.log(foo.bar());
    }

};
于 2012-09-20T17:38:52.330 に答える
0

その方法で変数 test にアクセスするには、次のようにオブジェクトのプロパティとして定義する必要があります。

var foo = {
    test: 'Hello World, before calling bar()',
    bar: function()
    {
        this.test = 'Hello World';
    },
    speak: function()
    {
        // Log the Variable from above ^^
        console.log(this.test);
    }
};
console.log(foo.test);

また、キーワード this を使用してオブジェクト foo にアクセスするように関数を変更しました。通常は機能しますが、JavaScript でスコープを追跡するのは難しい場合があるため、その点に注意してください。

于 2012-09-20T17:40:20.780 に答える