这有效:
<div id="result"></div>
<script type="text/javascript">
var Base64Encode = window.btoa || CryptoJS.enc.Base64.stringify;
document.getElementById('result').innerHTML = Base64Encode("Please work.");
</script>
Run Code Online (Sandbox Code Playgroud)
但是,这个:
<div id="result"></div>
<script type="text/javascript">
var Test = {
Base64Encode: window.btoa || CryptoJS.enc.Base64.stringify
};
document.getElementById('result').innerHTML = Test.Base64Encode("Please work.");
</script>
Run Code Online (Sandbox Code Playgroud)
生成一个错误"TypeError:'btoa'调用一个没有实现接口Window的对象."
小提琴:
为什么第一个示例有效但第二个示例发出错误?修复此特定错误的正确方法是什么?
为什么第一个示例有效但第二个示例发出错误?
当函数被调用为时Base64Encode()
,this
上下文被隐式设置为window
.但是,当你把它作为方法打开时Test.Base64Encode()
,this
会参考Test
和btoa
grumps.
修复此特定错误的正确方法是什么?
Base64Encode = window.btoa
? window.btoa.bind(window)
: CryptoJS.enc.Base64.stringify;
Run Code Online (Sandbox Code Playgroud)