2012-09-02 80 views
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,并试图创建一个对象,领域和方法。 我不能让我的方法来访问我的字段变量。

+0

我们建议您使用数组文本'[]'创建一个数组,而不是'新的Array( );' – 0x499602D2

回答

6

你试图使用该运营商这是不对的访问一个局部变量,所以这里是工作示例

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

链接:http://jsfiddle.net/3QN37/

1

你不需要this.myArray。单独使用myArray就足够了(和工作)。

1

alert(myArray);应该可以正常工作,我认为

1

什么this随每个功能的范围而变化。但是,myArray将对内部函数可见。例如:

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

您已经混淆了两种类型的变量:局部变量和成员变量。 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();​ 
+0

你刚才回答了这个问题,但我不认为你的第二个答案会起作用。在这种情况下,'this'指的是内部功能,而不是外部功能。 – rjcarr

+1

试试吧。有用。这是因为'this'指的是“点之前的东西”,在这种情况下是'exampleObj'。 –

相关问题