在Dart中,函数是否可以具有与之关联的原型?
示例JavaScript代码:
doStuff.prototype.isDefined = true; //is there anything like Javascript's function prototypes in Dart?
function doStuff(){
console.log("The function doStuff was called!");
}
Run Code Online (Sandbox Code Playgroud)
是否有可能在Dart中做到这一点(即为每个函数创建属性列表?)
这里有两件事要解决:
首先,Dart没有原型或原型继承,而是使用经典继承。对象具有原型而不是原型,并且具有原型超类而不是原型链。
其次,对于您的具体情况,我认为我们必须了解更多您需要做的事情才能弄清楚Dart中惯用的方式。应该很快就可以使用对象来模拟函数,这样您就可以调用一个对象,并且仍然具有状态和与之关联的其他方法。
有关更多信息,请参见本文:http : //www.dartlang.org/articles/emulating-functions/
该功能登陆后,您将可以执行以下操作:
class DoStuff {
bool isDefined = true;
call() => print("The function doStuff was called!");
}
var doStuff = new DoStuff();
main() => doStuff();
Run Code Online (Sandbox Code Playgroud)
如果您需要跟踪有关功能的固定元数据集,则该方法有效。它与JavaScript稍有不同,因为该函数的每个实例都是Dart,其状态都为isDefined。我不确定是否有可能或容易获得该函数的多个实例是JavasScript,但是您可能需要将其设为isDefined静态,以便在所有实例之间共享该值。
Dart 不允许您在运行时从类的实例中添加或删除成员变量。在 Dart 中重写您的示例,它可能看起来像这样:
class doStuff {
bool isDefined;
doStuff() {
isDefined = true;
}
void stuff() {
print('The function stuff was called!');
}
}
main() {
new doStuff().stuff();
}
Run Code Online (Sandbox Code Playgroud)
如果你想向 Dart 中的类添加属性包,你可以这样写:
class PropertyObject {
Map<String, Dynamic> properties;
PropertyObject() {
properties = new Map<String, Dynamic>();
}
Dynamic operator[](String K) => properties[K];
void operator[]=(String K, Dynamic V) => properties[K] = V;
}
main() {
PropertyObject bag = new PropertyObject();
bag['foo'] = 'world';
print('Hello ${bag['foo']}');
}
Run Code Online (Sandbox Code Playgroud)
请注意,您无法使用“.”访问地图属性 操作员。
| 归档时间: |
|
| 查看次数: |
1131 次 |
| 最近记录: |