0

我首先在这个网站上发现了这个想法:

http://theburningmonk.com/2011/01/javascript-dynamically-generating-accessor-and-mutation-methods/

关键是将局部变量分配给类范围以设置动态类属性。

在这段代码中,我设置了一个局部变量 _this 等于类范围。但是由于某种原因,_this 的属性可以在类之外访问。为什么是这样?_this 在创建时被声明为私有成员。

var MyClass = function( arg )
{
var _this = this;
_this.arg = arg;

// Creates accessor/mutator methods for each private field assigned to _this.
for (var prop in _this)
{
    // Camelcases methods.
    var camel = prop.charAt(0).toUpperCase() + prop.slice(1);

    // Accessor
    _this["get" + camel] = function() {return _this[prop];};

    // Mutator
    _this["set" + camel] = function ( newValue ) {_this[prop] = newValue;};
}
};

var obj = new MyClass("value");
alert(obj.getArg());

这怎么会跑?它会提醒“价值”。这不应该是可访问的,因为 _this 是私下声明的。当我写这篇文章时,我做错了修改器/访问器分配;我还是这样。

我打算写这个,将这些方法分配给类范围:

    // Accessor
    this["get" + camel] = function() {return _this[prop];};

    // Mutator
    this["set" + camel] = function ( newValue ) {_this[prop] = newValue;};

但要么工作。为什么 _this 的私有方法可用?

任何帮助都是极好的!

谢谢,困惑的脚本

4

1 回答 1

1

的值_this只是 的副本this,因此两者都将引用新创建的对象。可用的是对象本身。

换句话说,一个对象的引用与另一个引用一样好。在您的代码中,有三个:

  1. this, 在构造函数内部
  2. _this,也在构造函数内部
  3. objnew,作为表达式的结果,它被分配了对同一对象的引用。

在较新的 JavaScript 实现中,可以隐藏属性,但该隐藏适用于全局。JavaScript 没有像 C++ 或 Java 这样的语言那样的“类范围”。

于 2013-04-30T15:50:14.933 回答