San*_*han 1 javascript google-chrome ecmascript-6
这是谷歌Chrome版本53.0.2785.101(64位)的问题.我尝试运行一个简单的html文件,当我使用'slot'这个词时,它会抛出错误'slot.testFun不是函数'.
<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>
Run Code Online (Sandbox Code Playgroud)
我们的代码中没有与此变量冲突.它只是浏览器,不允许在这个最新版本中使用变量名.
如果您使用除"slot"之外的任何其他名称,它可以正常工作.
这不是ECMAScript问题,而是DOM问题.
该插槽属性都有相应的slot属性,onclick属性做愚蠢的事情with,所以你得到有效的调用this.slot.testFun(),因为它发现slot(默认为是一个空字符串),它到达正确的范围之前.
slot是DOM的新增功能,并且支持slotChrome 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |