Ich habe vor einer Woche gerade angefangen, Javascript zu lernen, und ich bin in ein Stolperstein gelaufen. In dem angegebenen Link kann ich aus irgendeinem Grund die Funktion innerhalb des Objekts nicht aufrufen. Irgendwelche Ideen, was ich falsch mache? Jeder Rat wäre großartig.So rufen Sie eine Funktion in einem Objekt auf
Antwort
Sie rufen die Funktion, aber die Funktion nicht definiert ist, zurückkehrt. Seien Sie sich der Tatsache bewusst, dass this
verschiedene Bedeutungen hat, die in anderem Zusammenhang genannt werden, in testObj
, this == testObj
, daher ist this.word
undefined.
Vielleicht kann diese fiddle helfen.
var testObj = {
bar: function(){
console.log(this.word)
}
}
Wenn Sie testObj.bar nennen Hier bezieht sich dies auf die TestObj und TestObj hat kein Eigentum Wort
var testObj = {
bar: function(){
console.log(this.word)
}.bind(this)
}
Verwenden .bind (this) oder .bind (Fenster)
Weil Der Umfang hat sich geändert.
In JavaScript bezieht sich der Gültigkeitsbereich auf den aktuellen Kontext Ihres Codes. Bereiche können global oder lokal definiert werden. JavaScript-Umfang zu verstehen, ist der Schlüssel zum Schreiben von kugelsicherem Code und zu einem besseren Entwickler. Sie werden verstehen, wo auf Variablen/Funktionen zugegriffen werden kann, in der Lage sein, den Umfang des Code-Kontexts zu ändern und in der Lage sein, schneller und wartungsfreundlicher Code zu schreiben sowie viel schneller zu debuggen.
So ist der richtige Code ist:
var that = this;
var testObject = { bar: function() { return that.word }}
In Ihrer Lösung "dieses" ist "Fenster" Objekt. So können Sie auch diesen Code:
var testObject = { bar: function() { return window.word }}
- 1. So rufen Sie eine Erlang-Funktion in Elixir auf
- 2. So rufen Sie eine Funktion, PostgreSQL
- 3. So rufen Sie eine Funktion mit Stichargumenten auf
- 4. So rufen Sie eine Hostfunktion in einem CUDA-Kernel auf?
- 5. So rufen Sie eine JS-Funktion mit OnClick-Ereignis auf
- 6. So rufen Sie eine PHP-Funktion auf Knopfdruck
- 7. So rufen Sie eine Dart-Funktion aus Javascript auf?
- 8. So rufen Sie eine Funktion aus der kendoListView-Vorlage auf
- 9. So rufen Sie eine Template-Member-Funktion auf?
- 10. So rufen Sie eine Methode von einem Dienst auf?
- 11. So rufen Sie eine Funktion in app_controller in meinen Elementen
- 12. Rufen Sie ein Objekt innerhalb einer Funktion
- 13. So rufen Sie eine Vorlagenmethode auf?
- 14. Rufen Sie eine JavaScript-Funktion preload() auf?
- 15. So rufen Sie UDF in DataStage auf?
- 16. So rufen Sie eine Funktion bei jeder Auswahl in Spinner
- 17. So rufen Sie eine Variable aus einer anderen Funktion im selben Objekt auf?
- 18. So rufen Sie eine JavaScript-Funktion von einem JavaFX-WebView bei Klick auf die Schaltfläche auf?
- 19. So rufen Sie eine Python-Funktion auf einem Ubuntu auf 12.04.5 LTS
- 20. So rufen Sie PHP ein Objekt in einem anderen Objekt auf Facebook api url
- 21. So rufen Sie Vb-Funktion von Javascript
- 22. So rufen Sie die Funktion in sich auf
- 23. So rufen Sie die Funktion .removeAllFiles() in Dropzone.js nach einem Klick auf eine Schaltfläche
- 24. So rufen Sie eine Funktion von einer Erweiterung in Swift
- 25. So rufen Sie eine JavaScript-Funktion von PHP?
- 26. So rufen Sie JavaScript-Funktion in modalem Inhalt auf?
- 27. So rufen Sie eine Javascript-Funktion in VB-Skript
- 28. So rufen Sie die WinAPI-Funktion SetDllDirectory() in Delphi auf?
- 29. So rufen Sie die Funktion in einer Ansicht auf
- 30. So rufen Sie eine Funktion eines anderen Objekts in JavaScript auf (mit script.aculo.us)
Versuchen Sie, nur mit 'this' statt' this.word' und Sie werden sehen, dass die Konsole Sie unterschiedliche Werte für 'this' gibt auf, wo Sie sind. –
Diese Syntax sieht für mich aus. Als Sie die Funktion als Teil des Objekts definiert haben, haben Sie ihm bereits einen Namen gegeben ... 'bar'. Ich glaube nicht, dass "Test" auch da sein sollte. So etwas wie: 'bar: function() {...}' – David
@David, die Syntax ist seltsam, stimme ich zu, aber es funktioniert: [fiddle] (https://jsfiddle.net/kv6bf76n/). –