Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос о наследовании (https://javascript.ru/forum/misc/51980-vopros-o-nasledovanii.html)

javacrypt 28.11.2014 19:26

Теперь я кажется понял. Совсем забыл про ссылки на объекты в js. Спасибо. Я вас понял обоих.

nerv_ 28.11.2014 22:56

Erolast, krutoy,
1. мне надо вызвать конструктор родительского класса - как?
2. мне надо вызвать супер метод - как?
:)

krutoy 28.11.2014 23:49

nerv_,
В чем проблема? Ты не можешь вызвать функцию?
проще всего так
function Super(){alert("Hello!")}
function F(){}
F.prototype=Object.create(Super.prototype)
F.prototype.constructor=F
o=new F

o.__proto__.__proto__.constructor()

я думаю.

krutoy 29.11.2014 00:02

Цитата:

Сообщение от nerv_
мне надо вызвать супер метод - как?

А суперметод ты вообще вызываешь обычно, он же наследуется
childObject.supermethod()

danik.js 29.11.2014 06:39

Цитата:

Сообщение от krutoy
А суперметод ты вообще вызываешь обычно, он же наследуется

А если ты его перекрыл своим?

krutoy 29.11.2014 07:32

Цитата:

Сообщение от danik.js
А если ты его перекрыл своим?

function Super(){alert("Hello!")}
Super.prototype.onceAgain=function(){alert("Hello again!!!")}
function F(){}
F.prototype=Object.create(Super.prototype)
F.prototype.constructor=F
F.prototype.onceAgain=function(){alert(2)}
o=new F
o.onceAgain=function(){alert(1)}

o.onceAgain()
o.__proto__.onceAgain()
o.constructor.prototype.onceAgain()

o.__proto__.__proto__.onceAgain()
o.__proto__.__proto__.constructor.prototype.onceAgain()

Erolast 29.11.2014 08:16

Цитата:

Сообщение от nerv_ (Сообщение 343360)
Erolast, krutoy,
1. мне надо вызвать конструктор родительского класса - как?
2. мне надо вызвать супер метод - как?
:)

Есть три варианта:
  1. В функции extend устанавливать ребенку в свойство ссылку на родителя.
    function extend(Child, Parent) {
      ...
      Child.Parent = Parent;
    }
    
  2. Добираться до родительского класса через .prototype.__proto__ ребенка или __proto__.__proto__ инстанса ребенка. Можно оформить в функцию:
    function getParent(Class) {
      return Class.prototype.__proto__;
    }
    
  3. Не париться и использовать ES6, в котором внутри методов класса доступно ключевое слово super, ссылающееся на родительский класс. Лучший вариант, если хочется нормального ООП.

nerv_ 29.11.2014 12:33

Erolast, за неимением ES6 в браузере, тебе не кажется, что будет логичным всегда устанавливать ссылку на супер-класс?

Давайте не будем изобретать велосипедов, а просто использовать node.js inherits, благо она кросс-платформенная (клиент/сервер).
http://javascript.ru/forum/misc/5188...tml#post342727

krutoy, то, что ты пишешь, вообще ад :)

Erolast 29.11.2014 13:10

Цитата:

Erolast, за неимением ES6 в браузере, тебе не кажется, что будет логичным всегда устанавливать ссылку на супер-класс?
Не кажется. Компиляторы пошто? Тык, тык, тык.


Часовой пояс GMT +3, время: 04:51.