Ответ 1
Да, вы можете использовать extends
вместо него.
Что касается различий? Начнем с CoffeeScript:
class B extends A
Посмотрите JavaScript, созданный компилятором CoffeeScript для этого 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);
Итак, __extends
используется для объявления отношения наследования между B
и A
.
Снова перескажите __extends
в 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
(Вы можете проверить, что это верное воспроизведение скомпилировать его обратно в JavaScript.)
Вот что происходит:
- Все ключи, найденные непосредственно на
parent
, установлены наchild
. - Создается новый конструктор прототипов
ctor
с установленными его экземплярами 'constructor
свойствами, а егоprototype
- родительским. - В дочернем классе
prototype
установлен экземплярctor
.ctor
constructor
будет установлен вchild
, а сам прототипctor
parent
. - Свойство child class
__super__
установлено наparent
prototype
, для использования с помощью ключевого слова CoffeeScriptsuper
.
node документация описывает util.inherits
следующим образом:
Наследовать методы прототипов от одного конструктора к другому. прототип конструктора будет установлен на новый объект, созданный из superConstructor.
В качестве дополнительного удобства суперконструктор будет доступен через свойство constructor.super_.
В заключение вам не нужно использовать util.inherits
, если вы используете классы CoffeeScript; просто используйте инструменты, которые дает CS, и вы получаете бонусы, такие как ключевое слово super
.