Javascript 修改_init()对parent()有何影响?
我正在尝试更新Gnome外壳扩展。在它中,我重写了对象的_init方法,我是这样做的:Javascript 修改_init()对parent()有何影响?,javascript,gnome-shell,gnome-shell-extensions,Javascript,Gnome Shell,Gnome Shell Extensions,我正在尝试更新Gnome外壳扩展。在它中,我重写了对象的_init方法,我是这样做的: function newInitAppSwitcherPopup() { this.parent(); ... } AltTab.AppSwitcherPopup.prototype._init = newInitAppSwitcherPopup; 新方法在以下情况下失败: JS错误:TypeError:无法调用方法“parent” 这里我发现非常令人惊讶的是parent
function newInitAppSwitcherPopup() {
this.parent();
...
}
AltTab.AppSwitcherPopup.prototype._init = newInitAppSwitcherPopup;
新方法在以下情况下失败:
JS错误:TypeError:无法调用方法“parent”
这里我发现非常令人惊讶的是parent
方法实际上存在(如果我更改名称,我会得到一个“notdefined”错误)
我不明白的是,原来的AppSwitcherPopup.\u init仍然在使用对parent()的调用
这在Gnome 3.12下运行得很好,但在Gnome 3.16中被破坏了……我想他们在他们的GObject或继承模型中做了一些更改?我有一个类似的代码用于我的配置小部件
const MenuConfigWidget = new GObject.Class({
Name: 'SimpleMenu.Prefs.MenuConfigWidget',
GTypeName: 'SimpleMenuMenuConfigWidget',
Extends: Gtk.Grid,
_init: function(params) {
this.parent({... });
...
}
});
您是否扩展了类,我们的just monkey patch是_init函数?正如您在提供的代码中看到的,我只是通过原型对_init函数进行了monkey patch…您是否建议扩展该类?不确定这是否是问题所在。另一种可能性是,GObject javascript内省添加了某种检查,阻止您在没有提供正确参数的情况下调用parent()。