Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Разработчики молодцы и добавили как раз то, чего мне (да и думаю многим другим) не хватало в JS.Какой у Вас опыт с другими языками?
Плагин для VS 2012 удобен
function TypeCastException(message, typeFrom, typeTo) {
this.message = message;
this.typeFrom = typeFrom;
this.typeTo = typeTo;
}
function cast(objFrom, objTo) {
var success = true;
for (var p in objFrom)
if (!(p in objTo)) {
throw new TypeCastException("Невозможно преобразовать объект к указанному типу", objFrom, objTo);
break;
}
else
if (typeof(objTo[p]) != typeof(objFrom[p])) {
success = false;
break;
}
if (success)
return objFrom;
throw new TypeCastException("Невозможно преобразовать объект к указанному типу", objFrom, objTo);
}
Надмножество TypeScript сделано для того, чтобы реализовать функции, необходимые для разработки и поддержки серьёзных масштабируемых приложений.
Today, we’re introducing a new programming language that solves a very specific problem – getting JavaScript development to scale.
class Greeter {
//...
}
var Greeter = Backbone.Model.extend({
//...
});
/**
* @param (Int) myParameter
* @return {String} myReturnValue
*/
function intToString() {
//...
}
Не удобство наследования в JS заключается в сложной реализации более чем 1 уровня наследования.
Geometry => Shape => Rectangle => RoundedRectanglevar Rectangle = LibCanvas.declare( 'LibCanvas.Shapes.Rectangle', 'Rectangle', Shape ...
class Rectangle implements Shape
declare = function (declareName, Parent, params) {
if (prototyping) return this;
params = methods.prepareParams(declareName, Parent, params);
// line break for more user-friendly debug string
var Constructor = function ()
{ return methods.construct.call(this, Constructor, arguments) };
// <debug> - should be removed on production
if (params.name) {
Constructor = new Function('con', 'return {"' + params.name + '": ' +
function(){ return con.apply(this, arguments) }
+ '}["' + params.name + '"];')(Constructor);
}
// </debug>
for (var i = 0, l = mutators.length; i < l; i++) {
mutators[i].fn( Constructor, params[mutators[i].name] );
}
Constructor.prototype.constructor = Constructor;
if (params.declareName) methods.define( params.declareName, Constructor );
return Constructor;
};
// Дальше идет ещё много-много кода
Ага. Что наследование реализовать в ЖС тяжело.
Не тяжело.
Не удобство наследования в JS заключается в сложной реализации более чем 1 уровня наследования.
Я показал различая сложности?
Показал.
Вообще использование библиотеки для реализации базового функционала, мне видеться большим таким костылем.
JavaScript can be used like a classical language, but it also has a level of expressiveness which is quite unique. We have looked at Classical Inheritance, Swiss Inheritance, Parasitic Inheritance, Class Augmentation, and Object Augmentation. This large set of code reuse patterns comes from a language which is considered smaller and simpler than Java.
…
Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies. Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.
Не писали вы, писал кто-то другой. Или вам религия запрещает использовать чужие реализации?
Они внезапно чем-то сильно отличаются?
И?
Чем — всем? С интерфейсами, знаком. И?
Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies. Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.
Ну вообще-то, это вы задаете вопросы и что-то пытаетесь спорить.
То, что implements для ts — это ключевое слово, не значит, что где-то за ним не стоит какой-то код. Например, код компилятора/транслятора. Но вас это посему-то не смущает.
Я привел ссылку на краткое описание того, как в JS можно реализовать как «классическое» (C++-like) наследование,
И, главное, я даже привел цитату, которую вы решили не читать и не понимать
Напоминаю, что вы не сравниваете, а пытаетесь всех убедить, что C++-like наследование в JS реализовать сложно: habrahabr.ru/post/153077/?reply_to=5250583#comment_5229441
Интерфейсы приплели только вы.
Ну вообще-то, это вы задаете вопросы и что-то пытаетесь спорить.
Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies. Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.
После чего у вас «несколько уровней наследования» ВНЕЗАПНО превратилось строго и исключительно в implements.
Кстати, забавный момент, когда я писал комментарий, я только раза 2 видел ts и вместо extends, я написал implements. И если на js реализовать extends возможно, то implements…
Но вы упорно гнете «аааааа хочу интерфейсы».
Ветка с вашим участием вообще началась тут: habrahabr.ru/post/153077/?reply_to=5251967#comment_5207411 если что.
Я утверждаю, что реализация более чем 1 уровня наследования в JS сделано очень ну удобно, т.к. оно повышает сложность реализации задачи.
var myTheBest = function(){
}
myTheBest.SomeProperty = 111;
для многих классовое наследование может быть просто удобнее
if (a.field) {
...
}
if (a.field != null && a.field != undefined) {
...
}
var a = { field: {} };
if (a.field) {
}
if (a.field != null && a.field != undefined) {
if (a.field != null) {
if (a.field !== null && a.field !== undefined) {
if ((a.field !== null && a.field !== undefined) && (a.field !== undefined)) {
var a = null;
typeof a; //"object"
typeof a !== 'undefined' && a !== null
typeof a !== 'undefined' вообще использовать не надо. a != null отлично применяется практически для всего кода.class TestClass {
someMethod(stringParameter: string): void;
someMethod(numberParameter: number, stringParameter: string): void;
someMethod(stringOrNumberParameter: any, stringParameter?: string): void {
if (stringOrNumberParameter && typeof stringOrNumberParameter == "number")
alert("Variant #2: numberParameter = " + stringOrNumberParameter + ", stringParameter = " + stringParameter);
else
alert("Variant #1: stringParameter = " + stringOrNumberParameter);
}
}
var t = new TestClass()
t.someMethod("a");
t.someMethod(1, "a");
TypeScript: язык для разработки больших приложений на JavaScript