class Point {
var obj ={};
get _obj => obj;
set _obj(v){
print('active!$v');
obj=v;
}
setObj(){
this._obj={'a':1}; // it's work print active!{a: 1};
this._obj['a']=2; // it does't work no print ; why>?
}
}
void main() {
Point().setObj();
}他为什么不干活呢?我猜Dart不同于Js with Class prototype..
发布于 2019-12-31 18:50:14
使用此代码时:
this._obj={'a':1};您正在调用自定义设置器:
set _obj(v){
print('active!$v');
obj=v;
}但在使用以下方法时:
this._obj['a']=2;您正在访问地图。它没有你的自定义实现的print('active!$v')行。
您可以尝试在dart pad中执行以下代码,以查看值是如何更新的:
class Point {
var obj ={};
get _obj => obj;
set _obj(v){
print('active!$v');
obj=v;
}
setObj(){
this._obj={'a':1}; // it works by replacing whole map using custom setter
print(_obj);
this._obj['a']=2; // it works by accessing map values
print(_obj);
}
}此外,自定义设置器将替换整个obj映射,而_obj['a']仅更新映射中分配给a键的值。
https://stackoverflow.com/questions/59541979
复制相似问题