gpt4 book ai didi

javascript - 如何在 Javascript 对象中正确定义 (function || function)?

转载 作者:行者123 更新时间:2023-11-30 08:45:52 24 4
gpt4 key购买 nike

这个有效:

<div id="result"></div>

<script type="text/javascript">
var Base64Encode = window.btoa || CryptoJS.enc.Base64.stringify;

document.getElementById('result').innerHTML = Base64Encode("Please work.");
</script>

但是,这:

<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>

生成错误“TypeError: 'btoa' called on an object that doesn't implement interface Window.”

fiddle :

http://jsfiddle.net/kAGU2/

为什么第一个示例有效,但第二个示例出现错误?修复此特定错误的正确方法是什么?

最佳答案

Why does the first example work but the second one emit that error?

当函数被调用为 Base64Encode() 时,this context隐式设置为 window。但是,当您将其作为 Test.Base64Encode() 上的方法调用时,this 将引用 Testbtoa 对此提示不已。

What's the correct way to fix this particular error?

您需要 bind它到预期的上下文:

Base64Encode = window.btoa
? window.btoa.bind(window)
: CryptoJS.enc.Base64.stringify;

关于javascript - 如何在 Javascript 对象中正确定义 (function || function)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com