为什么官方示例这里要自己给自己重新赋值一遍


这行代码如果没有就失效了,但是我不明白为什么需要这一句,我看另一个非spine动画示例就没有这一句赋值

为了触发 property setter,这也是一个非常典型的问题,就是不可以拿 Array, Vector, Matrix 等类型的属性值,直接修改属性的子属性或列表元素。

第一句代码会触发属性 getter,但是修改完以后并不会触发 setter,引擎也不知道 sockets 被更新了

2赞


话说,这是命中了什么敏感词

不懂问一下 ?.表示可以没有这个属性 !.是表示一定有这个属性吗?

话说这种代码会不会在打包时,被优化删除。。。。。

不会,但更好的方法是缓存好 sockets,每次重新赋值

class SpineAttach {
    private _sockets = [];
    onLoad () {
        // ...
        this._sockets.push(socket);
        this.skeleton.sockets = this._sockets;
    }
}

这代码确实丑陋啊

谢谢大大的回复,那我想问一下,为什么官方文档这一章节给的示例就没有这行自己给自己赋值的代码,这种场景和我主帖的有区别么

确实有问题,我们改一下