gpt4 book ai didi

javascript - 理解 Javascript 原型(prototype)链

转载 作者:行者123 更新时间:2023-12-02 15:27:57 24 4
gpt4 key购买 nike

如果我有一个 String 实例,并且修改其构造函数的原型(prototype),则每个 String 实例的原型(prototype)都具有该属性(如预期)。

 "test string".constructor.prototype.thing = function() {return this;}
console.log("new string".thing());//prints "new string"

但是,如果我修改 String 构造函数的构造函数原型(prototype),则这不再有效:

String.constructor.prototype.thing = function() {return this;}
console.log("new string".thing());//returns "new string".thing() is not a function

如果我使用 String.proto 语法,也会发生同样的事情。为什么是这样?我的印象是,JavaScript 在寻找属性时会沿着原型(prototype)链一路向上。如果我向 String.constructor.prototype 添加一个属性,那么 String 将不具有该属性,但其父对象将具有,对吗?因此 String 的所有实例也应该有权访问该属性。我的想法哪里错了?

最佳答案

However, if I modify the String constructor's constructor's prototype, then this no longer works:

构造函数是一个函数,因此任何构造函数的构造函数都是Function

这意味着“String 构造函数的构造函数的原型(prototype)”是 Function.prototype

如果您向 Function.prototype 添加某些内容,它将显示为任何函数的成员,而不是任何字符串的成员。

<小时/>

你可以玩一下Object.getPrototypeOf得到一个想法。

$ (Object.getPrototypeOf(Object(""))
String {length: 0, [[PrimitiveValue]]: ""}
$ Object.getPrototypeOf(Object.getPrototypeOf(Object("")))
Object {}
$ Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Object(""))))
null

原始字符串的对象值是一个 String,其中是一个对象,它是原型(prototype)链的末尾。

关于javascript - 理解 Javascript 原型(prototype)链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33549677/

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