我正在开发一个简单的gnome shell扩展,在gnome shell repo的HACKING.md
中,它说我们应该使用new Lang.Class()
语言框架来初始化一个类。
但是,当我检查官方的gnome shell扩展repo示例时,每个扩展都使用es6类语法,而不是new Lang.Class()
。
所以,我的问题是:我应该对shell扩展使用es6类语法,并使用new Lang.Class()
框架为gnome shell本身做贡献吗?另外,在哪里可以获得关于gnome shell是什么体系结构以及我可以使用的完整api的更多信息?我在谷歌上搜索,所有的信息似乎都已经破损或过时了,这让像我这样天真的人非常失望。
谢谢您。
最佳答案
https://gitlab.gnome.org/GNOME/gnome-shell/issues/530#note_308621
下面是gnome shell开发人员的答案:
所以,我的问题是:我是否应该对shell扩展使用es6类语法,并使用新的lang.class()框架为gnome shell本身做贡献?
现在:是的。
在GJS中对ES6类的支持仍然是相对较新的,这就是为什么您仍然可以找到以前使用过的lang.class框架的很多用途。在gnome shell的情况下,还有一个额外的复杂的扩展形式:
const Lang = imports.lang;
const Foo = new Lang.Class({
Name: 'Foo'
});
// this works
class Bar extends Foo {}
class Baz {}
// this doesn't
var Quz = new Lang.Class({
Name: 'Quz',
Extends: Baz
});
计划当然是将gnome shell移植到使用es6类,但它将破坏所有仍然使用lang.class从gnomeshell中定义的类继承的扩展。因此,这不是我们应该逐渐潜入的东西,而是一个明确的转换,有足够的回旋余地,以便扩展开发人员在必要时调整代码(我希望在3.32周期的早期获得一个本地分支,所以敲敲木头)。
所以tl;dr:
新的应用程序或扩展应该明确地使用ES 6类,并且我建议对现有的开发人员认真考虑移植。
更一般的说法是:使用问题跟踪者作为支持论坛是非常无效的,因为当问题结束时,任何答案都会变得模糊,所以除了最初的“报告者”之外,可能没有人从中受益。这使得开发人员使用时间相当差(这不是花费在解决实际问题上)。
关于javascript - 开发Gnome Shell和扩展时应该使用ES6还是Lang类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52176326/