Javascript将类范围分配给局部变量无效

时间:2013-04-30 15:46:14

标签: javascript class accessor mutators

我首先在这个网站上找到了这个想法:

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

重点是将一个局部变量赋给类范围以设置动态类属性。

在这段代码中,我设置了一个等于类范围的局部变量_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());

为什么会这样?它会提醒“价值”。这不应该是可访问的,因为_这是私有声明的。当我写这篇文章时,我做了mutator / accessor赋值错误;或者我不过。

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

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

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

但要么工作。为什么这个'私人方法可用?

任何帮助都会很棒!

谢谢, 困惑的Scripter

1 个答案:

答案 0 :(得分:1)

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

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

  1. this,位于构造函数
  2. _this,也在构造函数
  3. obj,作为new表达式的结果,分配了对同一对象的引用。
  4. 在较新的JavaScript实现中,可以隐藏属性,但隐藏适用于全局。 JavaScript没有类似C ++或Java等语言的“类范围”。