You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:42:19