1

我对 Javascript 很陌生,在某处我找到了这段代码

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

在上面的对象中,增量函数使用this访问value变量。但是在像java这样的语言中,公共方法也可以在没有这个的情况下访问私有成员..为什么在这里不可能?

4

4 回答 4

1

因为value试图在全局范围内获取一个名为value的变量,而这里你在一个对象中,这是该对象的一个​​属性。

于 2012-06-04T11:40:19.473 回答
0

因为这是 Javascript,而不是 Java。这两种语言之间没有任何关系或相似之处,尽管 Javascript 的名称中有“Java”。

于 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 回答