Как модификация _init() влияет на parent()?

Я пытаюсь обновить расширение оболочки Gnome. В нем я переопределяю метод _init объекта, что делаю так:

function newInitAppSwitcherPopup() {
     this.parent();        
     ...
}
AltTab.AppSwitcherPopup.prototype._init = newInitAppSwitcherPopup;

Новый метод терпит неудачу с:

ОШИБКА JS: TypeError: метод «родительский» не может быть вызван

Что меня очень удивляет, так это то, что метод parent действительно существует (если я изменю имя, я получу ошибку «не определено»).

Чего я не понимаю, так это того, что оригинальный AppSwitcherPopup._init все еще использует этот вызов для родителя (https://git.gnome.org/browse/gnome-shell/tree/js/ui/altTab.js?h=gnome-3-16#n54).

Это хорошо работало в Gnome 3.12, но не работает в Gnome 3.16... Думаю, они что-то изменили в своих моделях GObject или наследования?


person KrahnacK    schedule 29.11.2015    source источник


Ответы (1)


у меня есть аналогичный код, работающий для моего виджета конфигурации

const MenuConfigWidget = new GObject.Class({
  Name: 'SimpleMenu.Prefs.MenuConfigWidget',
  GTypeName: 'SimpleMenuMenuConfigWidget',
  Extends: Gtk.Grid,

  _init: function(params) {
    this.parent({... }); 
    ...
  }
});

Расширяете ли вы класс, который мы просто исправляем, для функции _init?

person Nesta    schedule 19.02.2016
comment
как вы можете видеть в предоставленном коде, я просто исправляю функцию _init через прототип... вы предлагаете вместо этого расширить класс? - person KrahnacK; 08.03.2016
comment
Не совсем уверен, что проблема в этом. Другая возможность заключается в том, что интроспекция javascript GObject добавляет какие-то проверки, которые не позволяют вам вызывать parent() без предоставления надлежащих аргументов. - person Nesta; 09.03.2016