Google Chrome版本53.0.2785.101(64位)存在问题。我尝试运行一个简单的html文件,它会抛出错误' slot.testFun不是一个函数'当我使用“' slot'。
这个词时<html>
<head>
<title>TEST</title>
</head>
<body>
<a href="#" onclick="slot.testFun();">Click Here</a>
<script type="text/javascript">
var slot = {
testFun: function(){
console.log('clicked');
}
}
</script>
</body>
</html>
我们的代码中没有与此变量冲突。它只是浏览器,不允许在最新版本中使用变量名称。
如果你使用除了&#39; slot&#39;之外的任何其他名称,它可以正常工作。
答案 0 :(得分:7)
这不是ECMAScript问题,而是DOM问题。
slot attribute有相应的slot
属性和onclick
attributes do stupid things with with
,因此您实际上正在调用this.slot.testFun()
,因为它找到slot
(默认为空字符串)在它到达正确的范围之前。
slot
是DOM的新增功能,slot
支持是Chrome 53中的新功能。它不会出现在Chrome 52中,也可能无法进入其他浏览器的最新版本。
解决方案:避免内在事件属性。用DOM绑定事件处理程序。这可以保护您免受他的冲突和未来的证明,从未来添加到DOM。
<a href="#">Click Here</a>
<script type="text/javascript">
var slot = {
testFun: function(){
console.log('clicked');
}
}
document.querySelector("a").addEventListener("click", slot.testFun);
</script>