为啥 setter 的 'this._obj['a']=2' 在 Dart 类中不起作用
Posted
技术标签:
【中文标题】为啥 setter 的 \'this._obj[\'a\']=2\' 在 Dart 类中不起作用【英文标题】:why 'this._obj['a']=2' for setter doesn't work in Dart Class为什么 setter 的 'this._obj['a']=2' 在 Dart 类中不起作用 【发布时间】:2019-12-31 09:13:54 【问题描述】: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 与带有 Class 原型的 Js 不同..
【问题讨论】:
你能添加更多关于这个的描述 谢谢!我已经详细描述过了 【参考方案1】:使用此代码时:
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
键的值。
【讨论】:
谢谢!如何使用 'this._obj['a']=2' active ' set _obj(v) print('active!$v');对象=v; ' ?我要'this._obj['a']=2' print print('active!$v'); 您不能覆盖地图中的[]
运算符。但是您可以创建一个在内部使用运算符的方法,并使用该方法来设置值而不是[]
。像这样的东西。 void setValue(key, value) print('$key: $value'); _obj[key] = value;
以上是关于为啥 setter 的 'this._obj['a']=2' 在 Dart 类中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何只允许 getter/setter 获取/设置变量值? [复制]
为啥在使用扩展语法复制对象后 getter/setter 不再工作?