Dart编程语言是否与Javascript';s";原型;?

Dart编程语言是否与Javascript';s";原型;?,dart,Dart,在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!"); } 是否可以在Dart中执行类似操作(即,为每个函数创建属性列表

在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!");
}

是否可以在Dart中执行类似操作(即,为每个函数创建属性列表?

Dart不允许您在运行时从类实例中添加或删除成员变量。在Dart中重写示例时,可能会出现以下情况:

class doStuff {
  bool isDefined;
  doStuff() {
    isDefined = true;
  }
  void stuff() {
    print('The function stuff was called!');
  }
}

main() {
  new doStuff().stuff();
}
如果要将属性包添加到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']}');
}
类属性对象{
地图属性;
PropertyObject(){
属性=新映射();
}
动态运算符[](字符串K)=>属性[K];
void操作符[]=(字符串K,动态V)=>属性[K]=V;
}
main(){
PropertyObject包=新的PropertyObject();
袋子['foo']='world';
打印('Hello${bag['foo']}');
}

请注意,您不能使用“.”运算符访问地图属性。

这里需要解决两个问题:

首先,Dart没有原型或原型继承,而是使用经典继承。对象有一个类而不是原型,对象有一个超类而不是原型链

第二,对于您的具体案例,我认为我们必须了解更多您需要做的事情,以找出在Dart中使用的惯用方法。应该很快就可以用对象模拟函数,这样您就可以调用一个对象,并且仍然拥有与之关联的状态和其他方法

有关更多信息,请参阅本文:

当该功能落地时,您将能够执行以下操作:

class DoStuff {
  bool isDefined = true;
  call() => print("The function doStuff was called!");
}
var doStuff = new DoStuff();

main() => doStuff();

如果您有一组关于函数的固定元数据需要跟踪,那么这种方法是有效的。它与JavaScript略有不同,因为函数的每个实例都是Dart,Dart将为
定义自己的状态。我不确定是否可能或容易获得函数的多个实例是JavasScript,但是,您可能需要将
定义为
静态,以便在所有实例中共享该值。

我惊讶地发现,从Javascript到Dart的转换比原始Javascript版本更为详细。另一种方法是实现函数接口: