1

私はJavascriptが初めてで、どこかでこのコードを見つけました

  var myObject = {
            value: 0,
            increment: function (inc) {
                this.value += typeof inc === 'number' ? inc : 1;
            }
   };

上記のオブジェクトでは、インクリメント関数は this を使用して変数にアクセスしています。しかし、Java のような言語では、パブリック メソッドはこれがなくてもプライベート メンバーにアクセスできます。なぜここでアクセスできないのでしょうか?

4

4 に答える 4

1

valueはグローバルスコープでvalueという名前の変数を取得しようとしているため、ここではオブジェクト内にあり、これはオブジェクトのプロパティです。

于 2012-06-04T11:40:19.473 に答える
0

これはJavascriptであり、Javaではないためです。Javascript の名前に「Java」が含まれていますが、2 つの言語の間に関連性や類似性はありません。

于 2012-06-04T11:39:49.387 に答える
0

それはあなたのスコープのためです...次のように試すことができます:

var myObject = (function(){
    var value = 0,
        increment = function (inc) {
            value += typeof inc === 'number' ? inc : 1;
            return value;
        };
    return {increment:increment}
})();
console.log(myObject.increment());
console.log(myObject.increment());
console.log(myObject.increment());
于 2012-06-04T11:40:06.607 に答える
0

すべての JS 関数には、一連のスコープへの参照があり、そこで変数を検索しようとします。このチェーンは次のとおりです。

  • 現在の関数のローカル変数
  • それを呼び出した関数のローカル変数
  • (...)
  • グローバル変数

現在のオブジェクト (およびそのフィールド) はチェーンに含まれていないため、 で参照する必要がありますthis

于 2012-06-04T11:42:03.403 に答える