0

QScriptEngine を作成し、いくつかのシグナル/スロットを持つグローバル オブジェクトとして QObject を設定します。次に、いくつかのスクリプト ファイルをロードし、(評価を使用して) エンジンに渡します。スクリプトはオブジェクトを作成し、グローバル オブジェクトのいくつかの信号をその関数に接続します。

悲しいことに、スクリプト オブジェクトのプロパティ (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);
}

なぜそれが起こるのでしょうか?

こんにちはベン

4

1 に答える 1

0

Javascript オブジェクトは参照によって渡されます。Bot.Passwordを呼び出す前に変更していますchanservObject.authか?

于 2012-05-16T18:41:10.113 に答える