-
Creator 版本: 最新的2.4.6分支仍存在
-
目标平台: Web
-
重现方式:源码使用解构赋值 const x = {…{a: 1, b: 2}, callback: ()=>{}}; console.log(x);
-
首个报错: 在低于45的Chrome内核WebView里,编码后运行,x会丢失callback参数。
-
之前哪个版本是正常的: 从19年到现在的2.4.6引擎,代码都有问题
-
手机型号:
-
手机浏览器:
-
编辑器操作系统:
-
重现概率: 必现
上述代码编译后,长这样:n({}, {a: 1, b: 2}, {callback: function(){}}),其中,n是编译后的方法,用于实现Object.assign的功能,长这样:
n =
(this && this.__assign) ||
function() {
return (n =
Object.assign ||
function(t) {
for (var e, o = 1, i = arguments.length; o < i; o++)
for (var n in (e = arguments[o]))
Object.prototype.hasOwnProperty.call(e, n) && (t[n] = e[n]);
return t;
}).apply(this, arguments);
}
this指向的是window,this.__assign貌似是在typescript.js里赋值的。优先使用Object.assign返回。
上述代码,正常情况下没问题,问题出在引擎源码中,又在object.js里,对Object.assign做了赋值(有了这段,上面__assign的后面那个function,其实就没用了,因为Object.assign一定有值)。
该问题的原因,是cc.js.mixin支持任意数量的参数,但这里,只取了前两个,导致第三个及以后的参数不会被合并。
麻烦引擎组修复一下吧,毕竟测试还是会找一些下载不了X5内核的安卓机进行测试的。。。
附Object.assign兼容性列表 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign



