Estoy aprendiendo Node.js recientemente. Tengo una pregunta sobre la función util.inherits
en Node.js. ¿Puedo usar extends
en coffeescript para reemplazarlo? Si no, ¿cuáles son las diferencias entre ellos?Diferencias entre 'extends' en coffeescript y 'util.inherits' en node.js
Respuesta
Sí, puede usar extends
en su lugar.
¿En cuanto a las diferencias? Vamos a empezar con una mirada a CoffeeScript:
class B extends A
Veamos the JavaScript the CoffeeScript compiler produces para esta 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);
Así, __extends
se utiliza para declarar la relación entre inheritence B
y A
.
Vamos reiteran __extends
un poco más legible, en 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
(se puede comprobar que esto es una reproducción fiel de compiling it back to JavaScript.)
Esto es lo que está sucediendo:
- Todas las claves encontradas directamente en
parent
se configuran enchild
. - Se crea un nuevo prototipo de constructor
ctor
, con sus instancias 'constructor
propiedades establecidas en el elemento secundario y suprototype
establecido en el elemento primario. - La clase secundaria
prototype
se establece en una instancia dector
.ctor
constructor
se establecerá enchild
, y el prototipo dector
en sí esparent
. - La propiedad
__super__
de la clase infantil está configurada enparent
'sprototype
, para uso con la palabra clavesuper
CoffeeScript.
node's documentation describe util.inherits
como sigue:
heredan los métodos de prototipo de un constructor en otra. El prototipo de constructor se establecerá en un nuevo objeto creado a partir de superConstructor.
Como conveniencia adicional, el superConstructor será accesible a través de la propiedad constructor.super_.
En conclusión, no necesita usar util.inherits
si está utilizando las clases de CoffeeScript; solo use las herramientas que CS le brinda, y obtendrá bonificaciones como la palabra clave super
.
- 1. Diferencias entre Narwhal y Node.js?
- 2. Node.js module.exports en CoffeeScript
- 3. ¿Cuáles son las principales diferencias entre las mejoras de CoffeeScript y Dart en JavaScript?
- 4. ¿Hay diferencias entre "y"
- 5. Diferencias entre Polígono y Polilínea en SVG
- 6. diferencias entre dependencymanagement y dependencias en maven
- 7. Diferencias entre numpy.random y random.random en Python
- 8. Diferencias entre Assert.True y Assert.IsTrue en NUnit?
- 9. Diferencias entre struct en C y C++
- 10. Diferencias entre hash y listas en R
- 11. diferencias sutiles entre oop java y php
- 12. Diferencia entre "process.stdout.write" y "console.log" en node.js?
- 13. Diferencia entre path.normalize y path.resolve en Node.js
- 14. Diferencias entre `input` y` raw_input`
- 15. Diferencias entre SwingWorker y Executor
- 16. Diferencias entre funtores y endofunctors
- 17. Diferencias entre textMultiLine y textLongMessage
- 18. Diferencias entre NoClassDefFoundError y ClassNotFoundException?
- 19. ¿Diferencias entre Smalltalk y python?
- 20. Diferencias entre DB2 y Oracle
- 21. Diferencias entre .ContextMenu y .ContextMenuStrip
- 22. diferencias entre memchr() y strchr()
- 23. Diferencias entre Camel y BPEL
- 24. Diferencias entre OTL y SOCI
- 25. Diferencias entre App.Config y Web.Config?
- 26. Diferencias entre Proc y Lambda
- 27. Diferencias entre AForge y OpenCV
- 28. Diferencias entre Perl y PHP
- 29. Diferencias entre Sproutcore y Ember
- 30. Diferencias entre JPA y JPA2