QtScript Javascript对象丢失属性

QtScript Javascript对象丢失属性,javascript,qt,qtscript,Javascript,Qt,Qtscript,我创建了一个QScript引擎,并将QObject设置为具有一些信号/插槽的全局对象。然后我加载一些脚本文件并将其传递给引擎(使用evaluate)。脚本创建一个对象,并将全局对象的一些信号连接到its函数 遗憾的是,当脚本对象的函数从信号(其在求值过程中的设置,我检查过)调用时,脚本对象的属性(this.password)被清除 以下是脚本: function Chanserv(password) { this.password = password; // print(

我创建了一个QScript引擎,并将QObject设置为具有一些信号/插槽的全局对象。然后我加载一些脚本文件并将其传递给引擎(使用evaluate)。脚本创建一个对象,并将全局对象的一些信号连接到its函数

遗憾的是,当脚本对象的函数从信号(其在求值过程中的设置,我检查过)调用时,脚本对象的属性(this.password)被清除

以下是脚本:

   function Chanserv(password) {
    this.password = password;

//    print("#### Constructor local: " + password + " / global: " + Bot.Password);
}

Chanserv.prototype.test = function() {
//    print("This is a test function / " + Bot.Password + " / " + this.password);
}

Chanserv.prototype.auth = function() {
    print("#### entered auth function! " + this.password);
//    if (this.password && this.password.length > 0) {
    if (Bot.Password && Bot.Password.length > 0) {
        Bot.sendMessage("nickserv", "identify " + Bot.Password);
//        print("Trying to authenticate with " + this.password);
    }
    else {
        print("Bot.Password undefined.");
//        print("this.password = " + this.password 
//              + ", this.password.length = " + (this.password.length > 0));
    }
}

var chanservObject = new Chanserv(Bot.Password);  // this.password gets set

chanservObject.test();
try {
    Bot.joinedChannel.connect(chanservObject.auth); // this.password is empty when called...
    Bot.joinedChannel.connect(chanservObject.test);
//    Bot.connected.connect(chanserv.auth);
}
catch (e) {
    print(e);
}
你知道为什么会这样吗


Javascript对象是通过引用传递的。在调用
chanservObject.auth
之前是否修改了
Bot.Password

Bot.Password在加载和计算脚本之前在javascript端设置。代码看起来像“Bot.Password=“myPass”;”。正如您在上一篇文章中所看到的,Bot.Password即使在该函数被信号调用(用作回退)时也是有效的。当信号调用函数时,this.password是“未定义”的。当然,脚本不是最新的,但是bot代码本身应该是。。。