這是我試圖讓這段代碼工作的一整天。它應該與QScript help page中提供的代碼相同,但不幸的是它根本不起作用!QScript的問題
class Person
{
public:
QString nm;
Person()
{
}
Person(QString& name)
:nm(name)
{
}
};
Q_DECLARE_METATYPE(Person)
Q_DECLARE_METATYPE(Person*)
QScriptValue Person_ctor(QScriptContext* c,QScriptEngine* e)
{
QString x = c->argument(0).toString();
return e->toScriptValue(Person(x));
}
QScriptValue Person_prototype_toString(QScriptContext* c,QScriptEngine* e)
{
Person* per = qscriptvalue_cast(c->thisObject());
qDebug(qPrintable(per->nm));
return e->undefinedValue();
}
....
QScriptValue per_ctr = eng->newFunction(Person_ctor);
per_ctr.property("prototype").setProperty("toString",eng->newFunction(Person_prototype_toString));
per_ctr.property("prototype").setProperty("myPrint",eng->newFunction(Person_prototype_toString));
eng->globalObject().setProperty("Person",per_ctr);
...
如果我試圖在JavaScript評估以下代碼
var p = new Person("Guido");
p.toString();
p.myPrint();
我應該得到:
Guido
Guido
,而不是我真正獲得距離的toString功能的白線(probabily )調用Object.toString函數)和myPrint中的「解釋器錯誤:第2行:TypeError:表達式的結果'p.myPrint'[未定義]不是函數。」錯誤消息。我想我沒有正確地將兩個函數連接到Person原型,即使我嘗試着遵循文檔頁面的litteraly ...請有人可以解釋我是什麼故障?!謝謝!
如果刪除括號 變種p值=新的Person( 「吉」); p.toString; p.myPrint; 我沒有錯誤消息,但我還沒有 圭多 圭多 像我期待的,但一個空字符串... – Guido 2010-08-23 14:06:01
返回E-> toScriptValue(人()); 不應該是 return e-> toScriptValue(Person(x)); ? – user376258 2010-08-23 14:22:13
感謝您的通知!不幸的是它不是問題...... :(它繼續以相同的方式工作(toString的白色字符串和來自myPrint的錯誤消息) – Guido 2010-08-23 14:33:16