tl; dr restituire this
da un metodo è un modo comune per consentire "concatenazione" di metodi insieme.
this
si riferisce al contesto attuale, e cambia significato a seconda del modo in cui si sta invocando una funzione.
Con la funzione di chiamata, this
riferisce all'oggetto globale, anche se la funzione viene richiamata da un metodo, e la funzione appartiene alla stessa classe del metodo invoca. Douglas Crockford ha descritto questo come "errore nella progettazione del linguaggio" [Crockford 28]
Con invocazione di metodi, this
riferisce all'oggetto sul quale viene richiamato il metodo .
Con l'invocazione dell'applicazione, this
si riferisce a qualsiasi cosa venga impostata quando si chiama apply.
con il costruttore invocazione, this
si riferisce all'oggetto che è creato per voi dietro le quinte, che viene restituito quando le uscite costruttore (purché non si misguidedly riportare il proprio oggetto da un costruttore).
Nel tuo esempio sopra, si sta creando un nuovo metodo chiamato method
che consente di aggiungere funzioni in modo dinamico, e ritorna this
, consentendo in tal modo il concatenamento.
Così si potrebbe fare qualcosa di simile:
Car.method("vroom", function(){ alert("vroom"); })
.method("errrk", function() { alert("errrk"); });
e così via.
fonte
2011-11-28 19:00:30
@ user722756: Perché 'method' viene aggiunto a' Function.prototype', 'this' farà riferimento a una funzione contro la quale è stato chiamato 'method'. Questa funzione è presumibilmente pensata per essere usata come "costruttore", poiché 'method' sta estendendo l'oggetto' prototipo' della funzione. – RightSaidFred
Conosco l'uso della parola chiave "this" semplicemente non so quale sia l'uso di "return this" all'interno di una funzione. – user722756
'return this' è usato per creare una [fluent interface] (http://en.wikipedia.org/wiki/Fluent_interface). Vedi le risposte pubblicate da @marcioAlmada e @AdamRackis di seguito. –