【发布时间】:2012-08-03 19:47:25
【问题描述】:
这是我认为很简单的代码:
<html>
<head>
<script>
function Foobar(id) {
self = this;
self.id = id;
self.canvas = document.createElement('canvas');
self.canvas.style.border = '1px solid black';
document.body.appendChild(self.canvas);
self.canvas.addEventListener('mousedown', self.onMouseDown, true);
self.onMouseDown = function(e) {
console.log(self.id);
}
}
var s1, s2;
function onLoad() {
s1 = new Foobar(1);
s2 = new Foobar(2);
}
</script>
</head>
<body onload='onLoad()'>
</body>
</html>
为什么控制台没有弹出id号?
这是一个小提琴:http://jsfiddle.net/VRn7v/
【问题讨论】:
-
全局攻击,
var不是 self 可选的。在 JavaScript 中 self 也有意义,选择一个不同的变量名。 -
啊,一个隐式全局变量
self与现有全局变量self冲突的好例子。记住孩子,声明你的变量。 -
@epascarello 它在浏览器环境中有意义(因为它是对全局对象的引用),但在 JavaScript 本身中没有意义。
标签: events mouse javascript