2012-09-02 216 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'。 –

相關問題