2013-04-25 58 views
2

javascript我們可以做這樣的事情一個地圖內:飛鏢使用`this`像JavaScript的

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

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

如何做到這一點的dart

我想使用Map中的一些值來返回一個密鑰的值,例如javascript示例。

+0

是否有你不想爲此創建Dart類的原因? – 2013-04-26 00:26:38

回答

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"]); 

} 
5

你可以這樣做:

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

所以,相反的this你可以使用x,只要您使用x它已經被宣佈之後。