2017-12-28 2 views
0

I programmt ein Objekt in Javascript haben, die so aussieht:Methode zu setzen interne Variable gleich Arraylänge

var facebookFriends={ 
 
    name: "Ilias", 
 
    friendsArray:["john", "anna"], 
 
    friends:"", 
 
    setFriends:function(){ 
 
\t friends=friendsArray.length 
 
    }, 
 
};

Wenn ich rufe die Funktion ich folgende Fehlermeldung erhalten, die ich kann nicht verstehen.

VM52:6 Uncaught ReferenceError: friendsArray is not defined 
    at Object.setFriends (<anonymous>:6:2) 
    at <anonymous>:1:17 

Kann jemand erklären, warum das passiert, da das Array definiert ist? Irgendwie scheint es, dass die Funktion nicht kompiliert wird, bevor sie aufgerufen wird.

EDIT:

Das anfängliche Problem gelöst ist, aber jetzt kam ich mit einer neuen Idee: was Initialisierung der Variable ohne Setter-Methode:

var facebookFriends={ 
 
    name: "Ilias", 
 
    friendsArray:["john", "anna"], 
 
    friends:"", 
 
    friends:this.friendsArray.length, 
 
};

Jetzt kommt ein weiterer Fehler:

VM51:5 Uncaught TypeError: Cannot read property 'length' of undefined 
    at <anonymous>:5:31 
+7

'this.friends = this.friendsArray.length' sollte funktionieren –

Antwort

3

Sie müssen sowohl auf die Eigenschaften zuzugreifen (friendsArray und friends) mit this

setFriends : function(){ 
    this.friends = this.friendsArray.length 
}, 

Demo

var facebookFriends={ 
 
    name: "Ilias", 
 
    friendsArray:["john", "anna"], 
 
    friends:"", 
 
    setFriends:function(){ 
 
\t this.friends=this.friendsArray.length 
 
    }, 
 
}; 
 

 
console.log("before invoking setFriends ",facebookFriends.friends); 
 
facebookFriends.setFriends(); 
 
console.log("after invoking setFriends ",facebookFriends.friends);

0

Sie haben die Eigenschaft des Objekts verweisen mit this.

var facebookFriends={ 
 
    name: "Ilias", 
 
    friendsArray:["john", "anna"], 
 
    friends:"", 
 
    setFriends:function(){ 
 
\t   this.friends=this.friendsArray.length; 
 
    }, 
 
}; 
 

 
facebookFriends.setFriends(); 
 
console.log(facebookFriends.friends);

0

var facebookFriends ={ 
 
    name : "Ilias", 
 
    friendsArray : ["john", "anna"], 
 
    friends : "", 
 
    setFriends:function(){ 
 
\t  this.friends = this.friendsArray.length 
 
    }, 
 
}; 
 

 
facebookFriends.setFriends(); 
 
console.log(facebookFriends.friends);

0

Die Eigenschaft friendsArray ist nicht als eine Variable definiert. Sie haben facebookFriends als Variable definiert. Durch Schreiben von facebookFriends.friendsArray können Sie auf die Eigenschaft der Variablen facebookFriends zugreifen. Darüber hinaus sollten Sie Ihre setFriends Funktion wie folgt aussehen:

var facebookFriends={ 
    name: "Ilias", 
    friendsArray:["john", "anna"], 
    friends:"", 
    setFriends:function(){ 
     friends = facebookFriends.friendsArray.length 
    }, 
}; 
0

this.friendsArray oder den Objektnamen facebookFriends.friendsArray sollte

var facebookFriends={ 
name: "Ilias", 
friendsArray:["john", "anna"], 
friends:"", 
setFriends:function(){ 
friends= this.friendsArray.length //or facebookFriends.friendsArray.length 
}, 

} arbeiten;

Verwandte Themen