Recentemente sto imparando Node.js. Ho una domanda sulla funzione util.inherits
in Node.js. Posso usare extends
in coffeescript per sostituirlo? Se no, quali sono le differenze tra loro?Differenze tra "extends" in coffeescript e "util.inherits" in node.js
risposta
Sì, è possibile utilizzare extends
al posto di esso.
Per quanto riguarda le differenze? Cominciamo con uno sguardo a CoffeeScript:
class B extends A
Diamo un'occhiata a the JavaScript the CoffeeScript compiler produces per questo JavaScript:
var B,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
B = (function(_super) {
__extends(B, _super);
function B() {
return B.__super__.constructor.apply(this, arguments);
}
return B;
})(A);
Quindi, __extends
consente di dichiarare il rapporto tra l'ereditarietà B
e A
.
Diamo ribadiscono __extends
un po 'più essere letti, in CoffeeScript:
coffee__extends = (child, parent) ->
child[key] = val for own key, val of parent
ctor = ->
@constructor = child
return
ctor.prototype = parent.prototype
child.prototype = new ctor
child.__super__ = parent.prototype
return child
(è possibile verificare che si tratta di una fedele riproduzione da compiling it back to JavaScript.)
Ecco cosa sta succedendo:
- Tutti i tasti trovati direttamente su
parent
sono impostati suchild
. - Viene creato un nuovo costruttore prototipo
ctor
, con le relative proprietà 'constructor
impostate sul figlio e il relativoprototype
impostato su padre. - La classe figlio
prototype
è impostata su un'istanza dictor
. sarà impostato suchild
e il prototipo dello stessoctor
èparent
. - La proprietà
__super__
della classe figlio è impostata suparent
'sprototype
, per l'utilizzo dalla parola chiavesuper
di CoffeeScript.
node's documentation descrive util.inherits
come segue:
ereditano i metodi prototipo da un costruttore in un altro. Il prototipo di costruttore verrà impostato su un nuovo oggetto creato dal superConstructor .
Come ulteriore comodità, il superConstructor sarà accessibile tramite la proprietà constructor.super_.
In conclusione, non è necessario utilizzare util.inherits
se si utilizzano classi di CoffeeScript; usa solo gli strumenti che ti dà CS e ottieni dei bonus come la parola chiave super
.
- 1. Differenze fondamentali tra l'utilizzo di CoffeeScript `extends` vs. Backbone.js` extend`
- 2. Node.js module.exports in CoffeeScript
- 3. implements vs extends in generics in Java
- 4. Qual è la differenza tra "extends" e "include" in Jade?
- 5. Differenze tra struct in C e C++
- 6. Differenze tra array_replace e array_merge in PHP
- 7. Differenze tra -O0 e -O1 in GCC
- 8. Differenze tra CBUUID e NSUUID in swift
- 9. Differenze tra Apache Deft, Webbit e Vert.x
- 10. Quali sono le principali differenze tra i miglioramenti di CoffeeScript e Dart su JavaScript?
- 11. Differenza tra "process.stdout.write" e "console.log" in node.js?
- 12. differenza tra app.js e index.js in Node.js
- 13. Differenza tra path.normalize e path.resolve in Node.js
- 14. Differenze tra gevent e tornado
- 15. Differenze tra `input` e` raw_input`
- 16. Differenze tra funtori e endofuntori
- 17. Differenze tra VB.NET e VB
- 18. Differenze tra Agda e Idris
- 19. Differenze tra .ContextMenu e .ContextMenuStrip
- 20. differenze tra NSArray e CCArray
- 21. differenze tra char * e stringa
- 22. Differenze tra NoClassDefFoundError e ClassNotFoundException?
- 23. Differenze tra App.Config e Web.Config?
- 24. Differenze tra Log e Logger?
- 25. Differenze tra MPI_Scatter e MPI_Bcast
- 26. Differenze tra DB2 e Oracle
- 27. Differenze tra OTL e SOCI
- 28. Differenze tra Proc e Lambda
- 29. Differenze tra testoMultiLine e textLongMessage
- 30. Differenze tra express.Router e app.get?