内部函数无法访问外部函数的变量。

5
我创建了下面这个 jsfiddle,它重点展示了我的问题。 http://jsfiddle.net/UTG7U/
var ExampleObject = function() {
   var myArray = new Array();
   this.example = function() {
       alert(this.myArray);
   };
}

var exampleObj = new ExampleObject();
exampleObj.example();​

我刚接触JavaScript,试图创建一个对象、字段和方法。但是我无法让我的方法访问我的字段变量。


建议您使用数组字面量[]来创建数组,而不是使用new Array(); - David G
5个回答

7
您混淆了两种变量类型:局部变量和成员变量。 var myArray 是一个局部变量。 this.myArray 是一个成员变量。
只使用局部变量的解决方案:
var ExampleObject = function() {
   var myArray = new Array(); // create a local variable
   this.example = function() {
       alert(myArray); // access it as a local variable
   };
}

var exampleObj = new ExampleObject();
exampleObj.example();​

只使用成员变量的解决方案:

var ExampleObject = function() {
   this.myArray = new Array(); // create a member variable
   this.example = function() {
       alert(this.myArray); // access it as a member variable
   };
}

var exampleObj = new ExampleObject();
exampleObj.example();​

你之前回答了这个问题,但我认为你的第二个答案不适用。在那种情况下,“this”指的是内部函数,而不是外部函数。 - rjcarr
2
试一下。它有效。这是因为 this 指的是“点号前面的东西”,在这种情况下是 exampleObj - Raymond Chen

6

您试图使用 this 操作符访问本地变量,这是错误的,因此这里提供一个可用的示例:

var ExampleObject = function() {
   var myArray = new Array(1,2,3);
   this.example = function() {
       alert(myArray);
   };
}
var exampleObj = new ExampleObject();
exampleObj.example();​

Link: http://jsfiddle.net/3QN37/


1

this 的含义随着每个函数的作用域而变化。然而,myArray 将对内部函数可见。例如:

var ExampleObject = function() {
   var myArray = new Array();
   this.example = function() {
       alert(myArray);
   };
}
var exampleObj = new ExampleObject();
exampleObj.example();​

1

你不需要使用 this.myArray。只使用 myArray 就可以了(而且可以正常工作)。


1

alert(myArray); 应该可以正常工作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接