Flutter 为什么';这个."obj[';a';]=2';对于setter不';我不在飞镖班工作
他为什么不工作? 我猜Dart与使用类原型的Js不同。使用此代码时:Flutter 为什么';这个."obj[';a';]=2';对于setter不';我不在飞镖班工作,flutter,dart,Flutter,Dart,他为什么不工作? 我猜Dart与使用类原型的Js不同。使用此代码时: this._obj={'a':1}; 您正在调用自定义设置程序: set\u obj(v){ 打印('active!$v'); obj=v; } 但在使用以下方法时: this._obj['a']=2; 您正在访问地图。它没有自定义的print('active!$v')line实现 您可以在dart pad中尝试以下代码,以查看值是如何更新的: 类点{ var obj={}; 获取_obj=>obj; 设置对象(v){
this._obj={'a':1};
您正在调用自定义设置程序:
set\u obj(v){
打印('active!$v');
obj=v;
}
但在使用以下方法时:
this._obj['a']=2;
您正在访问地图。它没有自定义的print('active!$v')
line实现
您可以在dart pad中尝试以下代码,以查看值是如何更新的:
类点{
var obj={};
获取_obj=>obj;
设置对象(v){
打印('active!$v');
obj=v;
}
setObj(){
this._obj={'a':1};//它通过使用自定义setter替换整个映射来工作
打印(_obj);
this._obj['a']=2;//它通过访问映射值来工作
打印(_obj);
}
}
此外,自定义setter将替换整个
obj
映射,而\u obj['a']
仅更新映射中分配给a
键的值。能否添加有关此的更多说明谢谢!我已经详细描述过了,谢谢!如何使用“this._obj['a']=2'active”set._obj(v){print('active!$v');obj=v;}”?我想要“this._obj['a']=2'print print('active!$v');您不能覆盖映射中的[]
运算符。但是您可以创建一个在内部使用运算符的方法,并使用该方法来设置值,而不是[]
。像这样的void setValue(key,value){print('$key:$value');_obj[key]=value;}
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();
}