0; 谁能告诉我上-6ren">
gpt4 book ai didi

javascript - 这条语句 "Object.prototype"是做什么的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:14 25 4
gpt4 key购买 nike

var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;

谁能告诉我上面的代码在做什么?

最佳答案

让我们分解一下:

Object.prototype

这为我们提供了 JavaScript 对象,它是 Object 变量的原型(prototype)。什么是原型(prototype)?请允许我引用 Yehuda Katz 的精彩 blog post (值得一读):

If you try to look up a key on an object and it is not found, JavaScript will look for it in the prototype. It will follow the “prototype chain” until it sees a null value. In that case, it returns undefined.

接下来,我们有:

Object.prototype.toString

这将返回 Object 原型(prototype)上的 toString 函数。可以使用它们的 call 函数调用 JavaScript 函数。这里有几个例子:

Object.prototype.toString.call("foo")  # => "[object String]"
Object.prototype.toString.call(5) # => "[object Number]"

所以它基本上只是一个通用的 toString 函数,它返回一个字符串,描述您作为参数提供给 call 的任何内容。请注意,在这些示例中,参数本身就是对象,因此它们返回将自己描述为对象的字符串。如果我们将它传递给 window.HTMLElement 会怎么样?

Object.prototype.toString.call(window.HTMLElement)  # => "[object HTMLElementConstructor]"

现在我们看到它正在返回一个包含子字符串 "Constructor" 的字符串,这意味着它很可能是一个构造 HTML 元素的对象。最后我们可以理解完整的表达式:

Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor')  # => 19

由于 "Constructor" 是一个子字符串,indexOf 返回 19,即 > 0。所以基本上,这个表达式似乎是检查 window. HTMLElement 使用后缀“Constructor”标识自己,我猜这可能是某种浏览器标识检查。

(注意:在撰写本文时,我测试了使用 Safari 的 Web Inspector 控制台评估这些表达式,但您也可以使用 Chrome 或其他浏览器的控制台来测试此类内容。)

关于javascript - 这条语句 "Object.prototype"是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15470777/

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