簡體   English   中英

為什么 'this._obj['a']=2' for setter 在 Dart 類中不起作用

[英]why 'this._obj['a']=2' for setter doesn't work in Dart Class

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 不同。

使用此代碼時:

this._obj={'a':1};

您正在調用自定義設置器:

set _obj(v){
   print('active!$v');
   obj=v;
 }

但是在使用以下方法時:

this._obj['a']=2;

您正在訪問地圖。 它沒有您對print('active!$v')行的自定義實現。

您可以在飛鏢墊中嘗試以下代碼以查看值是如何更新的。:

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);
  } 
}

此外,定制的setter取代你的整個obj地圖,而_obj['a']更新只值分配給a你內心的映射鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM