2017-11-04 2 views
2

Ich habe Probleme beim Zugriff auf Felder (Variablen) in einer Funktionsdefinition. Meine Frage ist mit diesem Code:Zugriffsfelder in JavaScript-Funktionen

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

Es gibt mir 'undefined', warum? Ich würde erwarten, dass es ein leerer Wert ist. Gibt es eine Möglichkeit, auf diese Array-Variable book in arrs zuzugreifen?

Antwort

2

arrs ist undefiniert, weil test() nichts zurückgibt. Die Funktion deklariert eine Variable lokal und endet dann, so dass die lokale Variable nicht in den Gültigkeitsbereich fällt und nichts passiert.

Basierend auf der Nutzung, es sieht aus wie Sie Ihre Funktion wollen vielleicht ein Objekt ?:

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

Oder vielleicht die Funktion zurückkehren sollte sich ein Objekt konstruieren und Sie bedeutete, dass es mit new zu nennen:

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

Wie Carcigenicate sagte, fehlt Ihnen die Return-Anweisung innerhalb von test().

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

Versuchen Sie es jetzt.

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)