Comments 8
А где Typescript?
class BasicClass {
static staticMethod() {}
constructor(x) {
this.x = x;
}
someMethod() {}
}
class DerivedClass extends BasicClass {
static staticMethod() {}
constructor(x) {
super(x);
}
someMethod() {
super.someMethod();
}
}
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var BasicClass = /** @class */ (function () {
function BasicClass(x) {
this.x = x;
}
BasicClass.staticMethod = function () { };
BasicClass.prototype.someMethod = function () { };
return BasicClass;
}());
var DerivedClass = /** @class */ (function (_super) {
__extends(DerivedClass, _super);
function DerivedClass(x) {
return _super.call(this, x) || this;
}
DerivedClass.staticMethod = function () { };
DerivedClass.prototype.someMethod = function () {
_super.prototype.someMethod.call(this);
};
return DerivedClass;
}(BasicClass));
+2
Он в варианте «Другую». Собственно, я за него и голосовал.
0
TypeScript, пожалуй, достоин того, чтобы быть как минимум вне категории «другое». В идеале — самостоятельная категория.
+2
А в чём принципиальное отличие этой реализации от Babel?
Наследование статических полей — точно так же, методом
Наследование динамических полей — точно так же, методом
Ссылка на супер-класс так же подменяется во время компиляции.
Смысл тот же, просто чуть больше проверок на редкие крайние случаи.
Наследование статических полей — точно так же, методом
Object.setPrototypeOf
.Наследование динамических полей — точно так же, методом
d.prototype = Object.create(b)
.Ссылка на супер-класс так же подменяется во время компиляции.
Смысл тот же, просто чуть больше проверок на редкие крайние случаи.
0
Typescript, как и Babel своих особых классов не имеет, просто эмулирует ES6. Поэтому поведение и функциональность отличаться не должны.
Смысла голосовать отдельно за Typescript или Babel нет. Лучше бы в голосовании было бы просто "за ES6-классы (с любой эмуляцией)"
+1
Всего не охватишь, есть ещё Mootools и т.п. Но спасибо за пример кода!
Выглядит аналогично реализации Babel.
Выглядит аналогично реализации Babel.
0
Классическое наследование в JavaScript
После этой фразы я приготовился зачерпнуть ересь двумя руками.
Как известно, в чистом JavaScript классического наследования нет
Но уже в этом месте практически восстановил веру в
Что до реализации, то вариант BB не так уж и плох: он решает задачи по расширению базовых прототипов самой библиотеки. Если же нужно расширять собственные или делать многоуровневое наследование, то такой способ может не подойти. Тут то и появляется старый добрый CoffeeScript, который в связке с BB работал на ура.
instant.coffee
class MainView extends Backbone.Layout
# pass
instant.js
var MainView,
extend = 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; },
hasProp = {}.hasOwnProperty;
MainView = (function(superClass) {
extend(MainView, superClass);
function MainView() {
return MainView.__super__.constructor.apply(this, arguments);
}
return MainView;
})(Backbone.Layout);
+1
Sign up to leave a comment.
Классическое наследование в JavaScript. Разбор реализации в Babel, BackboneJS и Ember