2017-11-04 69 views
2

我無法訪問函數定義中的字段(變量)。我的問題是與此代碼:javascript函數中的訪問字段

<script> 
    function test(){ var book= [];} 
    var arrs = test(); 
    alert(arrs.book); 
</script> 

它給了我'未定義',爲什麼?我希望它是一個空值。有沒有什麼辦法可以在arrs上訪問這個book數組變量?

回答

2

arrs未定義,因爲test()不返回任何內容。所有的函數都是在局部聲明一個變量,然後結束,所以局部變量不在範圍之內,也沒有任何反應。

基礎上使用,它看起來像你希望你的函數可能返回一個對象?:

function test() { 
    return { book: [] }; 
} 

或者這個功能本身應該構造一個對象,你的意思是用new叫它:

function test() { 
    this.book = []; 
} 
var arrs = new test(); 
1

就像Carcigenicate說的,你錯過了test()中的return語句。

function test(){ 
    var book= []; 
    // missing return... 
    return book; 
} 
var arrs = test(); 
alert(arrs); 

現在就試試。

1

// old way 
 
function Test1() { 
 
    this.books = ['t1'] 
 
} 
 

 
var t1 = new Test1() 
 

 
alert(t1.books) 
 

 

 
//es6 class 
 
class T2 { 
 
    constructor() { 
 
    this.books = ['t2'] 
 
    } 
 
} 
 

 
var t2 = new T2() 
 
alert(t2.books) 
 

 
// plain object 
 
var t3 = { 
 
    books: ['t3'] 
 
} 
 
alert(t3.books) 
 

 
// static field 
 
function T4() {} 
 
T4.prototype.books = [] 
 

 
var t4a = new T4(), 
 
    t4b = new T4() 
 
t4a.books.push('t4') 
 
alert(t4b.books)