Dart在地图中使用`this`就像在Javascript上一样

时间:2013-04-25 05:48:26

标签: javascript dart

javascript我们可以这样做:

var x = {
  'name' : 'john',
  'modifiedName' : function () { return this.name + ' <- modified'}
};

所以x.modifiedName()返回john <- modified

如何在dart上执行此操作?

我想使用Map中的某些值来返回键的值,例如javascript示例。

2 个答案:

答案 0 :(得分:5)

你可以这样做:

var x;
x = {
    'name' : 'john',
    'modifiedName' : () => x['name'] + ' <- modified'
};
print(x['modifiedName']());

因此,只要您在声明后使用this,就可以使用x代替x

答案 1 :(得分:2)

不使用地图文字。但是你可以创建自己的地图类,并且你有多种方法可以实现这一目标。

作为方法

import "dart:collection";

class MyMap extends LinkedHashMap {

  String modifiedName() {
    String name = this["name"];
    return "$name <- modified";
  }

}

void main() {
  MyMap map = new MyMap();
  map["name"] = "John";
  print(map.modifiedName());
  map["name"] = "Harry";
  print(map.modifiedName());
}

作为财产

import "dart:collection";

class MyMap extends LinkedHashMap {

  String _modifiedName() {
    String name = this["name"];
    return "$name <- modified";
  }

  String get modifiedName => _modifiedName();

}

void main() {

  MyMap map = new MyMap();
  map["name"] = "John";
  print(map.modifiedName);
  map["name"] = "Harry";
  print(map.modifiedName);

}

作为地图密钥

import "dart:collection";

class MyMap extends LinkedHashMap {

  String operator [](String key) {
    if(key == "modifiedName") {
      String n = this["name"];
      return "$n <- modified";
    }
    return super[key];
  }

}

void main() {

  MyMap map = new MyMap();
  map["name"] = "John";
  print(map["modifiedName"]);
  map["name"] = "Harry";
  print(map["modifiedName"]);

}