QJSValue调用Array.prototype.push无效问题排查
QJSValue调用数组方法无效的原因及解决办法
问题出在调用push等数组方法时没有绑定正确的this上下文。JS中数组的实例方法依赖this指向数组本身才能完成修改操作,你当前的代码里,调用arr.property("push").call({4, 5, 6})时,call的第一个参数没有传入目标数组实例,导致push内部的this指向错误,无法对原数组做修改。
解决方法
调用call时,必须把数组实例arr作为第一个参数传入(用来指定this),后续参数才是方法本身需要的参数。
修改后的代码示例:
//QQmlApplicationEngine myEngine; auto arr = myEngine->evaluate("[1, 2, 3]"); qDebug() << arr.isArray(); //true qDebug() << arr.property("length").toInt(); //3 // 第一个参数传入arr指定this,后续是push的元素参数 qDebug() << arr.property("push").call({arr, 4, 5, 6}); qDebug() << arr.property("length").toInt(); //6,修改生效
也可以使用更直观的callWithInstance方法,直接指定实例:
arr.property("push").callWithInstance(arr, {4, 5, 6});
内容的提问来源于stack exchange,提问作者user20973570
相关产品推荐
相关产品推荐

