Первый метод прототипа:
// Председательствующий функция класса Person () {this.hair = 'black'; this.eye = 'black'; this.skin = 'желтый'; this.view = function () {return this.hair + ',' + this.eye + ',' + this.skin; }} // Функция подкласса man () {this.feature = ['Beard', 'strong']; } man.prototype = new Person (); var One = new Man (); console.log (one.feature); // ['Beard', 'strong'] console.log (one.hair); // Black Console.log (one.eye); // Black Console.log (one.skin); // желтая консоль.log (one.view ()); // черный, черный, желтыйЭтот метод самый простой. Вам нужно только присвоить значение атрибута прототипа подкласса к унаследованному экземпляру, а затем вы можете напрямую использовать метод наследуемого класса.
Что означает атрибут прототипа? Прототип является прототипом. Каждый объект (определяемый функцией) имеет свойство прототипа по умолчанию, которое является типом объекта.
И этот атрибут по умолчанию используется для реализации проверки цепочки. Это означает, что если атрибут объекта не существует, атрибут будет найден через объект, к которому принадлежит атрибут прототипа. Что если прототип не может быть найден?
JS автоматически найдет объект, к которому принадлежит свойство прототипа к атрибуту прототипа, так что он будет продолжать индексировать через прототип до тех пор, пока свойство или прототип не найдены и, наконец, пустые («неопределенные»);
Например, в методе One.View () в приведенном выше примере JS сначала будет искать, есть ли метод View () в одном экземпляре. Поскольку нет, он ищет атрибут Man.Prototype, а значение прототипа является экземпляром человека.
Этот экземпляр имеет метод View (), поэтому вызов успешным.
Второй способ - применить:
// Председательствующий функция класса Person () {this.hair = 'black'; this.eye = 'black'; this.skin = 'желтый'; this.view = function () {return this.hair + ',' + this.eye + ',' + this.skin; }} // функция подкласса man () {// person.apply (this, new Array ()); Person.apply (это, []); this.feature = ['Beard', 'strong']; } var one = new Man (); console.log (one.feature); // ['Beard', 'strong'] console.log (one.hair); // Black Console.log (one.eye); // Black Console.log (one.skin); // желтая консоль.log (one.view ()); // черный, черный, желтыйПРИМЕЧАНИЕ. Если параметр применения пуст, то есть, параметр не пройден, он будет проходить через New Array () и [], а NULL недействителен.
Третий тип - прототип Call+:
// Председательствующий функция класса Person () {this.hair = 'black'; this.eye = 'black'; this.skin = 'желтый'; this.view = function () {return this.hair + ',' + this.eye + ',' + this.skin; }} // функция подкласса man () {// person.apply (this, new Array ()); Person.call (это, []); this.feature = ['Beard', 'strong']; } man.prototype = new Person (); var One = new Man (); console.log (one.feature); // ['Beard', 'strong'] console.log (one.hair); // Black Console.log (one.eye); // Black Console.log (one.skin); // желтая консоль.log (one.view ()); // черный, черный, желтыйМеханизм реализации метода вызова требует еще одного человека. Прототип = новый человек (); Почему?
Это связано с тем, что метод вызова реализует только замену метода и не копирует атрибуты объекта.
Так наследует API Google Map API.
Вышеупомянутое обобщает реализацию трех методов наследования. Но каждый метод имеет свои преимущества и недостатки.
Если родительский класс такой:
// Функция родительского класса (волосы, глаз, кожа) {this.hair = волосы; this.eye = eye; это.skin = кожа; this.view = function () {return this.hair + ',' + this.eye + ',' + this.skin; }}Как можно спроектировать подклассы таким образом, чтобы подклассный человек передавал параметры родительскому человеку при создании объектов. Метод прототипа наследования не применим.
Вы должны использовать метод применения или вызова:
// Применить метод // Функция подкласса Man (волосы, глаз, кожа) {person.apply (это, [волосы, глаз, кожа]); this.feature = ['Beard', 'strong']; } // Метод вызова // Функция подкласса Man (волосы, глаз, кожа) {person.call (это, волосы, глаз, кожа); this.feature = ['Beard', 'strong']; }Но есть еще недостатки использования метода применения. Почему? В JS у нас есть очень важный оператор, который является «экземпляром», который используется для сравнения, является ли определенное противоположное направление определенного типа.
Для этого примера, в дополнение к тому, чтобы быть человеком, одним из экземпляров также должен быть тип человека. Однако, после наследства метода применения, человек не принадлежит типу человека, то есть значение (один экземпляр человека) является ложным.
После всего этого лучший способ наследования - это метод прототипа Call+. После этого вы можете попробовать, является ли значение (один экземпляр BaseClass) правдой.
Третий метод наследования также имеет недостатки: при подклассировании новых объектов вы должны передавать параметры, требуемые родительским классом, а свойства и методы в родительском классе будут воспроизведены. Следующий метод наследования идеально подходит:
Функция человека (имя) {this.name = name; } Person.prototype.getName = function () {return this.name; } function китайский (name, nation) {person.call (это, имя); this.nation = нация; } // Унаследовать функцию метода наследство (subclass, superclass) {function f () {} f.prototype = superclass.prototype; subclass.prototype = new f (); subclass.prototype.constructor = subclass.constructor; } наследство (китайский, человек); Winking.prototype.getnation = function () {return this.nation; }; var p = новый человек ('shijun'); var c = новый китайский ("liyatang", "Китай"); console.log (p); // человек {имя: "shijun", getName: function} console.log (c); // китайское {имя: "liyatang", нация: "Китай", конструктор: функция, getNation: function, getName: function} console.log (p.constructor); // функция Person (имя) {} console.log (c.constructor); // function winking () {} console.log (c exancefit winks); // true console.log (c ExtanceOf Person); // истинныйПриведенная выше статья кратко обсуждает три метода наследования и их преимущества и недостатки в JS. Это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.