2015-08-23 3 views
3

Я искал ES6, потому что, похоже, это продвигается при написании приложений responseJS. Я был немного удивлен, как работают конструкторы:Наследование конструктора ES6

class Human{ 
    constructor(name){ 
     this.name = name; 
    } 
    toString(){ 
     return "Name = " + this.name; 
    } 
} 

class Person extends Human{} 

var person = new Person("kim"); 

Насколько велико вероятность того, что один из следующих может сделать мое приложение хрупким при написании переднего конца приложения в JS с использованием системы на основе класса:

  • Параметрированные конструкторы неявно унаследованы (это хорошая идея в целом и какова вероятность того, что она останется такой?);
  • Невозможно перегрузить конструкторы в пределах одного класса;
  • Невозможность перегрузки по типам параметров;

Дополнительный вопрос:
вторичный вопрос у меня есть о том, как умно решение было бы использовать ES6 для крупных производственных приложений сегодня, и если это полезно использовать только ES6 для экспериментов на данный момент. Я не уверен, что неуместно думать, что JS стремится к полноценной системе на основе классов, такой как Java, и что вещи могут меняться (эволюционировать) быстрее, чем моя база кода сможет переварить.

+2

Что вы подразумеваете под "хрупким"? – Bergi

+2

Как есть «инвалидность к перегрузке»? – Bergi

+0

@Bergi В Java мы научились всегда вызывать конструктор, который предоставляет большинство параметров, например. 'Classname (name, 0, 0)' от конструкторов с меньшими параметрами. Не знаете, каковы последствия, если возможности там нет, и какова вероятность того, что мне понадобится перезаписать мой код, когда в будущем появится больше функций. – Trace

ответ

4

Параметрированные конструкторы неявно унаследованы - это хорошая идея в целом и какова вероятность того, что она останется такой?

Да, это так. Если вы не предоставляете конструктор, по умолчанию используется вызов родительского конструктора со всеми параметрами.

Это хорошая идея, так как class обязывает вас называть super() внутри конструктора (что необходимо, по крайней мере, для наследования пулинов и хорошей практики). Если не было конструктора по умолчанию, вам придется явно предоставить его самостоятельно, что привело бы к увеличению кода шаблона (и цель ключевого слова class заключалась в том, чтобы избежать этого).

Невозможно перегрузить конструкторы в пределах одного класса; Инвалидность к перегрузке на основе типов параметров

Нет, конечно, в JS вы не можете иметь несколько конструкторов для класса, но you can still overload it, как по количеству переданных аргументов и их типов.

Готово ли производство ES6?

Да. Стандарт принят, экспериментов с ним больше нет. Transpilers поддерживают все основные полезные синтаксические функции.

Я не уверен, является ли это неуместно думать, что JS имеет тенденцию к полной системе, основанной оперившегося класса как Java

Да, это неуместно. JS не имеет Java-подобной системы классов и вряд ли когда-либо получит ее. См. Также Will JavaScript ever become a 'proper' class based language?.

+0

спасибо за быстрый ответ и ресурсы. – Trace

Смежные вопросы