gpt4 book ai didi

javascript - 使用字符串作为函数调用范围

转载 作者:行者123 更新时间:2023-11-28 13:28:11 25 4
gpt4 key购买 nike

function foobar() {
console.log(this);
}

foobar.call("Hello");

此代码显示:

{ '0': 'H', '1': 'e', '2': 'l', '3': 'l', '4': 'o' }

我期待显示“Hello”。

为什么?以及如何解决这个问题?

最佳答案

Function#call 是(间接)将字符串原语转换为 String 对象(请参阅规范的 §10.4.3 ;我们从 §15.3.4.4 开始,这将我们带到 §13.2.1 ,这将我们带到 §10.4.3)。

您可以通过以下方式强制恢复:

console.log(this.toString());

请注意,在严格模式下,它不会被转换为 String 对象,因为在严格模式下,this 可以是基元(包括基元字符串) 。例如:

// Here, it gets converted to an object
function foo() {
snippet.log(typeof this); // "object"
}
foo.call("Hello");
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

但是如果我们使用严格模式:

// Strict mode
"use strict";

// Here, it remains a primitive
function foo() {
snippet.log(typeof this); // "string"
}
foo.call("Hello");
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

关于javascript - 使用字符串作为函数调用范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27397687/

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