1.8.1 bug 属性设置 不能同时具备default get

properties: {
speed:{
default:0,
get:function(){return this._speed;},
set:function(value){this._speed = value;}
},

  • 编辑器操作系统 :win7

  • 出现概率:100%

你defalut作用和get差不多啊,你指望2个一起写么:scream:

defalut 是默认值 get是访问属性时触发 怎么会一样呢?

而已尽管是报错了 但是 编辑器还是有期望的显示

只有get 时

两个都有时

这决定是编辑的bug

你意思是
speed:{
get:function(){return this._speed?this._speed:10;},
set:function(value){this._speed = value;}
},

这样是吧

这样编辑是改不了 speed的值 要在代码里面设置才行

还是不明白 default 和 get 怎么不能同时有呢?

有歧义了,如果你default和get/set写在一起,那你取speed值的时候,你是拿默认的defalut的值呢,还是拿get里面返回的值呢, 所以你defalut和get/set是不能写在一起的

至于你这里编辑器界面为什么是Null,是因为你的this._speed是未定义的

你2个都有的时候为什么会是0,是因为你写了 default: 0 ,编辑器里面默认给你的speed赋值为0, 但是由于你的default下面又写了get/set方法,所以编辑器下面会给你一个红色警告

官方那里也写了

get:

set:

当你为属性定义set/get访问器的时候,这个变量本身并不保存数据了呀,实际保存返还的都是_speed,
所以要定义default值,应该是对_speed值进行定义然后设定default值
_speed:{
default:1,
},

1赞

就像这样

properties: {
_speed: 0,
speed:{
get:function(){return this._speed;},
set:function(value){this._speed = value;}
},

谢谢耐心的回答