为啥 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 类中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Setter 方法真的在 Obj-C 中做吗?

JS中为啥object中,this指向window?

如何只允许 getter/setter 获取/设置变量值? [复制]

为啥在使用扩展语法复制对象后 getter/setter 不再工作?

为啥这个父类 setter 调用使用 type(self) 而不是 self?

ES5 的 setter 和 getter