1

JavaScript オブジェクトの変数の範囲を理解しようとしていました。しかし、私が得ている行動は少し道から外れているようです。簡単に言えば、関数を変数として定義するオブジェクトがある場合、関数変数は、それが定義されているオブジェクトの他の変数にアクセスできません。以下のコードは物事を明確にします。

<html>
<head>
    <script type="text/javascript">

        var someObject = {
            someVariable : 5,
            getVariable: function() {
                return someVariable;
            }
        };

        window.onload = function () {
            alert(someObject.getVariable());
        };

    </script>
</head>
<body>
    Hello There
</body>
</html>

上記のコードは、関数 getVariable() の someVariable に対して「ReferenceError: someVariable is not defined」を返します。この振る舞いについてコメントしたい人はいますか?

4

3 に答える 3

3

絶対。

あなたが話している「変数」は「変数」ではなくproperty、オブジェクトです(変数であるオブジェクト)。

そのため、2 つのオプションがあります。
オブジェクトが次のように作成されていると仮定します。

var obj = {
    property : 42,
    everything : function () { /* ... */ }
};

関数本体内で値 42 を返すための 2 つのオプションは次のとおりです。

obj.property;

また

this.property;

電話すると:

obj.everything();

JS インタープリターは、関数内でobj等しいと見なします。 または、それ自体を直接参照し、ドット表記またはブラケット表記を使用してアクセスします。this
objproperty.property["property"]

于 2012-11-06T01:27:00.690 に答える
1

これは変数ではなく、オブジェクトのプロパティ/フィールドです。

試してみてくださいthis.someVariable

thisこれは、オブジェクトを指す (やや特殊な) 変数であり、ドット (または角かっこ) 構文を使用して、そのオブジェクトのフィールドにアクセスできます。

(オブジェクトを指している別の変数) がスコープ内someObject.someVariableにある場所でも実行できます。someObject

于 2012-11-06T01:23:35.453 に答える
0

試してくださいthis.someVariable

var someObject = {
        someVariable: 5,
        getVariable: function () {
            return this.someVariable;
        }
    };

window.onload = function () {
    alert(someObject.getVariable());
};
于 2012-11-06T01:22:57.167 に答える