Rispondo al volo qui a quello che scrivi in questo post: http://forum.html.it/forum/showthrea...8#post13643018 Poi quando ho un attimo rispondo nel dettaglio alle questioni che poni qui. Intanto this.privateAttr è un errore: casomai solo privateAttr senza this. Poi, quella di "estendere lo scope" è una cosa inutile in un caso come quello: di solito è una cosa rara, che si fa soltanto quando è impossibile passare il this alla funzione in quanto chiamata in automatico (cosa che di solito succede soprattutto quando si ha a che fare con gli eventi). Lì il problema lo risolvi così:
La cosa è molto sensata, perché l'oggetto this non è ereditato staticamente, ma può cambiare da chiamata a chiamata. Io posso chiamare il metodo di un oggetto e applicarlo a un altro oggetto, a quel punto nonostante Metodo sia un metodo dell'oggetto A, erediterà il this dell'oggetto B a cui lo applico:codice:var a = function () { this.publicAttr = "attr pubblico" ; var privateAttr = "attr privato" ; // var self = this ; (inutile) this.publicMethod = function () { alert( this.publicAttr ); alert( privateAttr ); // ho tolto il this } var privateMethod = function () { alert( this.publicAttr ); alert( privateAttr ); // ho tolto il this } this.publicMethod(); privateMethod.call(this); }
In questo caso ho cambiato il this di un metodo pubblico dell'oggetto arrayVuoto qual è join() e l'ho applicato a oggettoGenerico, che non lo possiede, ma di conseguenza questo discorso vale anche per le funzioni "private".codice:var oggettoGenerico = { "0": "ciao mondo", "1": "hello world", "length": 2 } var arrayVuoto = []; alert(arrayVuoto.join.call(oggettoGenerico, "|"));
Adesso devo proprio scappare. Risponderò con calma.![]()

Rispondi quotando