Подтвердить что ты не робот

Что такое "наследование" в Javascript?

Может ли кто-нибудь объяснить мне простыми словами смысл " наследования" в JavaScript?

4b9b3361

Ответ 1

В простых терминах наследование - это концепция того, что приобретает свойства или поведение чего-то другого. Чтобы сказать, что A наследует от B, говорит, что A является типом B. Птица наследует от Animal, потому что Bird тип Animal - он может делать то же самое, но немного больше (или по-другому)!

В JavaScript это отношение немного сложно определить, но нести синтаксис. Вы должны использовать специальный объект с именем prototype, который присваивает свойства типу , например Animal. Только function имеют prototype, поэтому вы должны сначала создать функцию:

function Animal() {}; // This is the Animal *Type*
Animal.prototype.eat = function () {
    alert("All animals can eat!");
};

Теперь, чтобы создать тип, который наследуется от Animal, вы также используете объект prototype, но на этот раз тот, который относится к другому типу , например. Птица:

function Bird() {}; // Declaring a Bird *Type*
Bird.prototype = new Animal(); // Birds inherit from Animal
Bird.prototype.fly = function() {
    alert("Birds are special, they can fly!");
};

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

var aBird = new Bird(); // Create an instance of the Bird Type
aBird.eat(); // It should alert, so the inheritance worked
aBird.fly(); // Important part of inheritance, Bird is also different to Animal

var anAnimal = new Animal(); // Let check an instance of Animal now
anAnimal.eat(); // Alerts, no problem here
anAnimal.fly(); // Error will occur, since only Birds have fly() in its prototype

Ответ 2

Хорошее объяснение Роберта о наследовании в Javascript здесь

Способ наследования работает в JavaScript, так как это prototype вместо class-based.

Например,

function Being () {
    this.living = true;
}
Being.prototype.breathes = function () {
    return true;  

Объект, который наследует бытие

Robert.prototype = new Being;
function Robert () {
    this.blogs = true;
}
Robert.prototype.getsBored = function () {
    return "You betcha";
};  

Итак, в принципе, если мы создадим новый экземпляр объекта Robert и вызовет некоторые его методы, результатом будет:

// Create an instance of the Robert object
var me = new Robert();

/*
    Returns "You betcha" as it a method
    belonging to the Robert object
*/
me.getsBored();

/*
    Returns true. Since the Robert object
    doesn't have a breathes method of
    its own, it goes back in the
    prototype chain to its parent
    object, Being, and finds the
    method there
*/
me.breathes();  

Также хорошо читается наследование JavaScript: Наследование JavaScript

Ответ 3

Роберт прав, что "наследование" не означает ничего другого в JS, но оно реализовано иначе, чем на многих других языках. Сказать, что объект или класс наследуется от другого, означает, что члены (атрибуты, поведение) могут быть определены родителем, но доступны через ребенка. Прежде чем вы спросите, что означает "члены", объекты совокупные типы (aka composite типы), а элементы - это компоненты.

JS изначально был разработан с основанным на прототипе наследованием, где родителями являются объекты, но наследование на основе классов (своего рода) может быть обучено различные средства. Классы (и, таким образом, наследование классов) могут быть добавлены к более поздним стандартам ECMAScript, который является стандартом, который определяет JS, наряду с другими языками, такими как ActionScript. ActionScript уже поддерживает классы.

Близко относится к "наследованию" - это "расширение", где ребенок расширяет родительский элемент путем добавления или переопределения элементов.

Ответ 4

Это так же просто, что вы можете наследовать свойства из другого объекта javascript, например:

var a = function () {}
a.prototype.sayHello = function () { alert('hello') }

var b = function () {}
b.prototype = new a();

var c = new b();
c.sayHello(); // Alerts "hello"

У Джона Резига jQuery есть отличный путеводитель по нему http://ejohn.org/apps/learn/ о наследовании http://ejohn.org/apps/learn/#76

EDIT Обновлен код на основе комментария Робертса.

Ответ 5

Значение наследования в JavaScript не отличается от любого объектно-ориентированного языка.

Унаследованные дети наследуют родительское поведение (возможности и функциональность состояния). Эти дети могут, конечно, добавить дополнительное поведение или переопределить существующие. В этом отношении наследование в JavaScript, безусловно, не отличается от любого другого.

Что о значении в максимально простых словах. Однако вы не спросили, как наследование реализовано в JavaScript, потому что это будет совершенно другая история (и вопрос). В этом случае мы должны объяснить различия между классами и прототипами (которые используются в JavaScript).