Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Виртуальный класс а-ля Си Плас Плас (https://javascript.ru/forum/misc/51128-virtualnyjj-klass-lya-si-plas-plas.html)

Erolast 25.10.2014 15:17

И не буду, пример неверен. Надо так:
function inherits(Child, Parent) {
  Child.prototype = Object.create(Parent.prototype, {
    constructor: {
      value: Child,
      writable: true,
      configurable: true,
      enumerable: false
    }
  })
}

function Interface(){};
function Class(){};

inherits(Class, Interface);

Interface.prototype.someValue = 1;
Class.prototype.someValue = 2;

alert((new Interface()).someValue);
alert((new Class()).someValue);

terminator-101 25.10.2014 15:20

Erolast,
Поправь код, у тебя ошибка там. Как поправишь, будем дальше смотреть.

Erolast 25.10.2014 15:52

Пардон, поправил.

terminator-101 25.10.2014 15:59

Erolast,
Че то я не догоняю, до конца, че там происходит. Ща некогда, потом подумаю. Отпишусь завтра.

Erolast 25.10.2014 18:10

Сначала
Цитата:

не надо п*ть, когда не знаешь. Впрочем, тебе не впервой.

пиши жеквери, это самое твое.

я распинаться перед тобой не буду, один х не поймшь
, а потом "что-то не догоняю, что происходит"? Найс.

Sweet 25.10.2014 19:10

Цитата:

Сообщение от Erolast
а потом "что-то не догоняю, что происходит"? Найс.

Ага, тоже доставило. Это ж классика. Что там думать?:)

Voronar 25.10.2014 19:33

Цитата:

Сообщение от Erolast (Сообщение 337528)
И не буду, пример неверен. Надо так:
function inherits(Child, Parent) {
  Child.prototype = Object.create(Parent.prototype, {
    constructor: {
      value: Child,
      writable: true,
      configurable: true,
      enumerable: false
    }
  })
}

function Interface(){};
function Class(){};

inherits(Class, Interface);

Interface.prototype.someValue = 1;
Class.prototype.someValue = 2;

alert((new Interface()).someValue);
alert((new Class()).someValue);

А почему вместо Object.Create() не использовать просто new? Или тут в качестве параметра descriptors задаётся что-то жизненно важное?

P.S. Ну тут без меня началось... Я не встреваю в междусобойчик.

Erolast 25.10.2014 19:37

Цитата:

А почему вместо Object.Create() не использовать просто new? Или тут в качестве параметра descriptors задаётся что-то жизненно важное?
Ты имеешь в виду, почему не "new Parent()"? Потому что, во-первых, нам не нужно вызывать конструктор, во-вторых, Class.prototype.constructor должен быть равен самому классу, а при создании через new он будет равен родителю.

Но ты таки присмотрись к ES6.

Voronar 25.10.2014 19:51

Цитата:

Сообщение от Erolast (Сообщение 337557)
Ты имеешь в виду, почему не "new Parent()"? Потому что, во-первых, нам не нужно вызывать конструктор, во-вторых, Class.prototype.constructor должен быть равен самому классу, а при создании через new он будет равен родителю.

Но ты таки присмотрись к ES6.

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

Спасибо за пример реализации. Буду курить дальше.

Erolast 25.10.2014 20:00

Цитата:

ES6... Смущает то, что его, как ты говоришь, нужно "компилировать".
После должной настройки это один хоткей в редакторе.

Цитата:

Тем более туда ведь ещё будут вноситься изменения. Не придётся ли потом код переписывать?
До релиза три месяца осталось. Каких-то глобальных изменений уже не должно быть.


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