gpt4 book ai didi

javascript - Dartlang 类 VS JavaScript 类

转载 作者:行者123 更新时间:2023-12-02 14:24:09 25 4
gpt4 key购买 nike

我有以下使用 JS 类的 JS 代码,在不同的随机位置生成了多个矩形,单击时静态矩形开始移动,单击时移动矩形将被销毁。

我想用 Dart 语言重新编写相同的代码,考虑到我不想包含所有主 class { } 中的类属性和函数有什么想法吗?

var NS="http://www.w3.org/2000/svg";     
var SVG=function(h,w){
var svg=document.createElementNS(NS,"svg");
svg.width=w;
svg.height=h;
return svg;
}
var svg=SVG(1200,1500);
document.body.appendChild(svg);

class myRect {
constructor(x,y,h,w,fill,name) {
this.name=name;
this.SVGObj= document.createElementNS(NS,"rect");
self = this.SVGObj;
self.x.baseVal.value=x;
self.y.baseVal.value=y;
self.width.baseVal.value=w;
self.height.baseVal.value=h;
self.style.fill=fill;
self.addEventListener("click",this,false);
}
}

Object.defineProperty(myRect.prototype, "draw", {
get: function() {
return this.SVGObj;
}
});

myRect.prototype.handleEvent= function(evt){
self = this.SVGObj;
switch (evt.type){
case "click":
if (typeof self.moving == 'undefined' || self.moving == false) self.moving = true;
else self.moving = false;

if(self.moving == true)
self.move = setInterval(()=>this.animate(),100);
else{
clearInterval(self.move);
self.parentNode.removeChild(self);
}
break;
default:
break;
}
}

myRect.prototype.step = function(x,y) {
return svg.createSVGTransformFromMatrix(svg.createSVGMatrix().translate(x,y));
}

myRect.prototype.animate = function() {
self = this.SVGObj;
self.transform.baseVal.appendItem(this.step(1,1));
};

for (var i = 0; i < 100; i++) {
var x = Math.random() * 500,
y = Math.random() * 300;

var r= new myRect(x,y,10,10,'#'+Math.round(0xffffff * Math.random()).toString(16),'this is my name');
svg.appendChild(r.draw);
}

最佳答案

您无法在 Dart 中动态向类或对象添加方法。您的选择是:

  1. 将它们放在类中
  2. 使它们成为以矩形为参数的函数

我会选择(2),只需让它们成为接受类实例的函数即可:

handleEvent(myRect, evt){
// ...
}

关于javascript - Dartlang 类 VS JavaScript 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38419126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com