gpt4 book ai didi

javascript - 为什么 String.prototype 中的 "this"会返回一个对象?

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

这可能是重复的、愚蠢的或偏离主题的,但实际问题是问题的标题。

我想做一些简单的事情:

String.prototype.log = function() {
console.log(this);
return this;
}

当被调用时(例如在 Firebug 中),结果是:

String { 0="t",  1="e",  2="s",  more...}

对于:"test".log(),当然会返回同样的东西。

现在,解决方法是在任何一侧进行 "" 连接或 this.toString()

为什么 thisString.prototype 作用域中的一个对象,而 instanceofObject字符串?

最佳答案

当您创建一个字符串时,您实际上创建了一个字符串函数的实例(对象)。

在 chrome 控制台中输入 String

console.log(String);
Output : function String()

如果你创建一个字符串

var x = new String("aaa");

x 实际上是String 函数的一个实例

console.log(x instanceof String); // true

为什么 x 是 Object 的实例?

在 JavaScript 中,每个对象都有一个 __proto__ 链接。

x.__proto__ == String.prototype;

这意味着x的原型(prototype)链接指向String原型(prototype)。

现在 String.prototype 也有一个 __proto__

String.prototype.__proto__ == Object.prototype;

instanceof 运算符首先搜索 __proto__ 链接并跟随它。

x的原型(prototype)链接指向String的原型(prototype),String的原型(prototype)指向Object原型(prototype)。

因此 x 也是 Object 的实例。

关于javascript - 为什么 String.prototype 中的 "this"会返回一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38206565/

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