Наследство введение
Наследование в JS является очень сложной темой, гораздо сложнее, чем наследование на любом другом объектно-ориентированном языке. В большинстве других объектно-ориентированных языков наследство класса требует только одного ключевого слова. Чтобы достичь цели наследства общественных членов в JS, необходимо предпринять серию мер. JS - прототип наследования. Благодаря этой гибкости мы можем использовать стандартное наследование на основе класса или более тонкий прототип наследование. В JS должно быть ясно, что все наследование осуществляется с помощью прототипа, а JS наследуется на основе объектов.
наследовать:
Функция животного (имя) {this.name = name; this.showname = function () {alert (this.name); }} функция Cat (name) {Animal.call (this, name); } var cat = new Cat ("Black Cat"); Cat.showname ();Animal.call (это) означает использование объекта животного вместо этого объекта. Тогда не будет все свойства и методы животных в кошке? Объект CAT может напрямую вызывать методы и свойства животных.
Множественное наследство:
function class10 () {this.showsub = function (a, b) {alert (ab); }} function class11 () {this.showadd = function (a, b) {alert (a+b); }} function class2 () {class10.call (this); Class11.call (это); }Это очень просто, используя два вызова для достижения множественного наследства
Конечно, существуют другие методы для наследства JS, такие как использование прототипов цепочек, которые не попадают в объем этой статьи, но только объясняет использование вызова здесь. Говоря о вызове, конечно, также применяется. Эти два метода в основном означают одно и то же. Разница в том, что второй параметр вызовов может быть любого типа, в то время как второй параметр применения должен быть массивом или аргументами.
Вот описание того, как реализовать простое наследство в JavaScript?
В следующем примере создаст сотрудника -сотрудника, который наследует все свойства в прототипе прототипа от человека.
Функция сотрудника (имя, секс, employeeid) {this.name = name; this.sex = sex; this.employeeid = employeeid;} // указать прототип сотрудника на экземпляр человека // Поскольку экземпляр лица может вызвать методы в прототипе лица, экземпляр сотрудника может также вызвать все свойства в прототипе человека. Employee.prototype = new Person (); employee.prototype.getemployeeid = function () {return this.employeeid;}; var zhang = new Employee ("zhangsan", "man", ""); console.log (zhang.getname ()); // "ЧжангсанВышеуказанная реализация наследования грубо и есть много проблем:
Человек создается при создании конструктора и прототипа сотрудника (далее называется классом), что является неуместным.
Конструктор сотрудника не может вызвать конструктор материнского класса, что приводит к повторным назначениям имени и половых атрибутах в конструкторе сотрудника.
Функции в сотруднике будут переопределять функции одного и того же имени лично, без механизмов перегрузки (а предыдущий - та же самая проблема типа).
Синтаксис для создания классов JavaScript слишком разбросан и не такой элегантный, как синтаксис в C#/Java.
В указании атрибута конструктора существует ошибка в реализации.