Ik probeer parameters aan de callback-functie van een Event Listener mee te geven. Het probleem is dat de callback-functie onderdeel is van een object.
In deze testcase stuur ik de 'caller' variabele mee, wat een link is naar het venster dat de titlebar wil maken. Vervolgens geef ik met een alert de titel van het venster weer.
De relevante code waar het om draait:
Ik krijg de volgende foutmelding wanneer ik op de titlebar klik:
Ik kan dus geen gebruik maken van 'this' in die functie. Hoe kan ik nu een functie in mijn object gebruiken?
Wanneer ik een functie probeer aan te spreken buiten het object werkt het wel.
In deze testcase stuur ik de 'caller' variabele mee, wat een link is naar het venster dat de titlebar wil maken. Vervolgens geef ik met een alert de titel van het venster weer.
De relevante code waar het om draait:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| function _titlebar(caller, title, width) { var titlebar = document.createElement('div'); var textnode = document.createTextNode(title); titlebar.setAttribute('class', 'titlebar'); titlebar.setAttribute('style', 'width: '+width+'px;'); titlebar.appendChild(textnode); titlebar.addEventListener('mousedown', function() { this.start_move(caller); }, false); titlebar.addEventListener('mouseup', this.stop_move, false); this._object = titlebar; } _titlebar.prototype.start_move = function(caller) { alert(caller._window_title); } |
Ik krijg de volgende foutmelding wanneer ik op de titlebar klik:
Het gaat dus om de volgende regel:Fout: this.start_move is not a function
Bronbestand: http://martijntje.xs4all.nl/webdesk/script/general.js
Regel: 10
JavaScript:
1
| titlebar.addEventListener('mousedown', function() { this.start_move(caller); }, false); |
Ik kan dus geen gebruik maken van 'this' in die functie. Hoe kan ik nu een functie in mijn object gebruiken?
Wanneer ik een functie probeer aan te spreken buiten het object werkt het wel.
Ik ontken het bestaan van IE.