Ik heb een aantal open-source editors vergeleken, en het valt me op hoe verschillend deze in code opgebouwd zijn. Twee voorbeelden:
Als ik het goed begrijp, maken beide manieren een instantie van een editor-object aan. De manier waarop de functies van het object worden toegevoegd is alleen anders. CodePress doet het binnen eenzelfde class (zeg ik dat goed?), WidgEditor loopt het object te prototypen met eigen functies.
Mijn vraag is: waarom werkt de eerste methode zonder prototype en de tweede niet? Ik begreep dat je prototype gebruikte om eigen methoden te definieren die de werking van javascript uitbreiden. Dat je dus meer bewerkingen kunt definieren voor bv. strings en arrays. Ik wist niet dat je prototype nodig had om een eigen object uit te breiden:
Ik ben erg in de war hierover. Wie kan mij verlichten?
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| // CodePress CodePress.run = function() { new CodePress(t[i]); } CodePress = function(obj) { self.initialize = function() {} self.toggleLineNumbers = function() {} self.getCode = function() {} } // WidgEditor function widgInit() { new widgEditor(textarea.id) } function widgEditor(id) { this.theToolbar = new widgToolbar(this); } function widgToolbar(theEditor) {} widgToolbar.prototype.addButton = function() {} widgToolbar.prototype.setState = function() {} |
Als ik het goed begrijp, maken beide manieren een instantie van een editor-object aan. De manier waarop de functies van het object worden toegevoegd is alleen anders. CodePress doet het binnen eenzelfde class (zeg ik dat goed?), WidgEditor loopt het object te prototypen met eigen functies.
Mijn vraag is: waarom werkt de eerste methode zonder prototype en de tweede niet? Ik begreep dat je prototype gebruikte om eigen methoden te definieren die de werking van javascript uitbreiden. Dat je dus meer bewerkingen kunt definieren voor bv. strings en arrays. Ik wist niet dat je prototype nodig had om een eigen object uit te breiden:
JavaScript:
1
2
3
4
5
6
| widgToolbar.addButton = function() {} // werkt niet widgToolbar.prototype.addButton = function() {} // werkt wel // bij CodePress: self.toggleLineNumbers = function() {} // werkt wel self.prototype.toggleLineNumbers = function() {} // werkt niet |
Ik ben erg in de war hierover. Wie kan mij verlichten?