我如何在 gjs 中使用“lang”?

问题描述

我最近在研究 Gnome shell 扩展。我查看了一些代码,如下所示:

const Lang = imports.lang;

const extension = new Lang.Class({...})

我在 GJS 中找不到任何关于 Lang 的信息。

去哪里找相关的开发手册?

解决方法

不要再使用Lang;它已被弃用,并且有更好的方法。它是在 Function.prototype.bind()ES6 Classes 之前创建的。一些阅读:

信号回调

function myCallback(foo,arg1) {
    if (this === foo)
        log('`foo` is correctly bound to `this`');
}

// OLD
fooObject.connect('signal',Lang.bind(myCallback,this));

// NEW
fooObject.connect('signal',myCallback.bind(this));

GObject 类

// OLD
const MyLegacyClass = new Lang.Class({
     GTypeName: 'MyLegacyClass',Extends: GObject.Object,_init(a,b) {
         this.parent(a);
         this.b = b;
     }
});

// NEW
const MyClass = GObject.registerClass({
     GTypeName: 'MyLegacyClass',},class MyClass extends GObject.Object { 
     _init(a,b) {
         super._init(a);
         this.b = b;
     }
);
,

它是 gjs 的内置模块——参见 modules/lang.js。它包括两个主要的东西:bind()(使“this”指向闭包中的逻辑对象的帮助器)和Class,它基本上用没有类概念的语言实现类...如果没有这个,就很难使用 GObject(一个基于类的对象系统)。

这是22497990

的答案

see this link