现在在给属性赋值的时候,属性的notify函数一定会被触发,即使新值与旧值是一样的也会触发,窃以为这样不好,
看看文档里写的
,这逻辑与这文档不就互相冲突了么,值都没变能叫修改么?
额,你赋值的时候,js可不会帮你检查新的值和旧的值是否相同,只会进行赋值操作, 就像你新车子换相同的轮胎,换了都是一样的,没有任何改变叫换轮胎?
当然这也是我的个人看法
这能一样么,换胎了车子有变化,属性赋值赋一样的对它有影响么?徒增一个函数的性能开销
然后你的意思是想在set方法里判断一下新值和旧值是否一样吗?
是啊,每次都要判断,好烦,好讨厌
判断不需要性能开销吗?还是说性能开销要小一点?
你觉得呢????
我要知道我就不会问了
我就是不知道notify是干啥的,所以不知道是调用notify性能开销大一点还是判断的开销大一点
这个所有编程语言里的 setter 都要自己判断新旧值是否相同呀,因为可能需要通知的是’赋值‘这个行为,所以不管值有没有改变都会触发。
1赞
很抱歉文档不太准确,我们会改成 当属性被赋值时触发指定方法
另外,如果传入的是一个对象,引擎很难判断是否相等,所以设计成需要用户自己判断是否相等。
例如
color: {
default: cc.Color,
notify () {
cc.log('Color changed!');
}
}
color = obj.color;
color.a = 127.5;
obj.color = color;
// 这时 notify 应该触发,所以不能帮用户进行判断新值与旧值是否一样
1赞
还是不准确,这样改了之后开发者肯定会问:那这个跟set函数有啥区别。
没什么区别,开发者喜欢用 setter 也行的。notify 本来就是一个附加功能,文档也没怎么着墨,用户如果觉得没用,无视也不会有任何问题。
刚刚找到区别了
因为我的一个属性要用枚举类型,但是枚举类型必须要有一个默认值(default),我想在这个枚举值改变的时候调用自定义方法,但是要用get和set方法的话就不能指定默认值,指定了默认值就不能用get和set
这个时候notify就有用了,仅供参考
最重要的一点,set是赋值前调用的,notify是赋值后调用的

