JavaScript 类型问题:未捕获的类型错误:对象 0 没有方法“draw”
javascript type issue: Uncaught TypeError: Object 0 has no method 'draw'
只是尝试使用 JS + canvas,我似乎碰壁了。我的最小应用程序的"目标"是单击画布上的任何随机位置,按下绘图按钮并在您单击的位置绘制正方形。
来自OO背景...我(尝试(使用 OO,在 js 中我没有完全掌握。
但基本上我有一个自定义的方形对象
function Square(l, w, x, y) {
this.length = l;
this.width = w;
this.posx = x - l/2;
this.posy = y - w/2;
//test
//ctx.fillStyle = "rgb(20,0,0)";
//ctx.fillRect(this.posx,this.posy,this.length,this.width);
this.draw = function() {
ctx.fillStyle = "rgb(20,0,0)";
ctx.fillRect(this.posx,this.posy,this.length,this.width);
}
}
每次用户单击时,我都会将其添加到数组中...这是我单击画布时的事件处理程序。
function addTo(evt) {
pos = getMousePos(evt);
var sq = new Square(50, 50, pos.x, pos.y);
list.push(sq);
output.innerText = "("+sq.posx+","+sq.posy+")";
}
这是我(尝试(绘制正方形的地方。
function renderStack() {
//alert(list);
canvas.width = canvas.width;
for(var o in list) o.draw();
}
这是错误:
Uncaught TypeError: Object 0 has no method 'draw'
我在尝试访问该对象的变量时遇到类似的错误。似乎在我将它们添加到列表中后,js 忘记了它们是什么类型?- 因为当我打印数组时,它充满了 [对象对象] 的
谢谢。
>for ... in ...
给你一个对象的键,而不是它的内容。
因此,在数组上,您将收到存储元素的索引和任何其他可枚举属性的名称。
相反,您应该使用:
for (var i = 0; i < list.length; ++i) {
list[i].draw();
}
for(var o in list)
o
是数组的索引(或属性(。您将通过 list[o]
访问该索引中存储的内容。
但是对于数组,最好使用 Alnitak 所示for
循环而不是for-in
。
更新:
当您需要遍历所有属性时,将使用 For-in。由于数组是一个对象,因此它具有索引和属性。因此,for-in 将遍历所有索引和属性。for-in 对对象更好。
例如
var obj = { p1: 1, p2: 2};
for(var prop in obj) {
//...
}
相关文章:
- Dynamics 2016内部部署Crm客户端脚本.选项集控件类型缺少方法
- JavaScript:创建新对象类型的方法
- 在javascript中定义内置类型的方法
- 为什么当我指定POST时,即使我已经尝试了类型和方法选项,我的ajax代码仍然会触发GET请求
- 为什么dijit.form.Select有方法setStore(),而dijit.fform.FilteringSele
- 这两种调用 JavaScript 匿名函数的类型有什么区别
- 在 Javascript 中使用逗号而不是 + 连接原始类型有什么好处吗?
- jQuery中是否有一些用于处理时间段数据类型的方法
- JSDoc - 记录可能返回任何类型的方法的正确方法
- 为什么像这样向 JavaScript 引用类型添加方法不起作用
- JavaScript / jQuery - 任何检测点击类型的方法
- JSPM-是否有方法或需要对捆绑文件进行版本化
- 当用户试图删除indexedDB数据库时,是否有方法执行函数
- Box2dWeb中是否有方法将对象的位置.x输出到console.log()
- 是否有方法在WebCrypto API中获取RSA密钥的组件
- 未捕获的类型错误:方法不是函数
- 正确检测抽象对象/引用类型的方法
- 是否有方法可以快速确定浏览器是否支持启用了cors的图像而不会污染浏览器?
- 为什么函数类型有命名参数?他们的目的是什么?
- 是否有方法以编程方式确定私钥是用DER还是PEM编码的?