__proto__原型的一些事情

請問 實例究竟是什麽?
在代碼編寫過程中 遇到了這個事情:
console.log(Person.prototype.__proto__== Object.prototype); 返回的是true 。首先Person是一個構造函數所以它會創建一個prototype屬性,又因爲prototype也是一個對象而它本身中有一個屬性__proto__ (該屬性只是針對一些瀏覽器可用),實際上是 實例的内部[[[Prototype]]這個特性被賦值為構造函數的原型對象,也就是說prototype的原型是Object.prototype(也就是說該對象prototype的構造函數是Object 或者換一種説法 也就是prototype的對象類型是Object 不知道我這裏理解的對不對)。
那麽問題來了console.log(Person.prototype.__proto__ instanceof Object); 這返回的是false 這裏爲什麽返回的是false???Object.prototype 這個對象 不是 Object 的實例嗎??console.log(Object.prototype instanceof Object); 返回的也是false ,難道説 有的對象不是Object的實例嗎?? 我還以爲一切對象都可以用 instanceof Object 返回的一定是 true 。。。。當然 console(Person.prototype instanceof Object); 返回的是true。
還有 Object.prototype 它對象類型是什麽呢?它的 instanceof 是什麽?目前初學JavaScript,可能問題描述的有些不好,不太清晰,求解答。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    问题是关于__proto__原型属性以及instanceof操作符的使用。

    首先,让我们解决第一个问题,为什么console.log(Person.prototype.__proto__ == Object.prototype)返回true。实际上,这是因为构造函数(例如Person)的原型(即Person.prototype)是一个对象,它继承了Object.prototype。所以,Person.prototype.__proto__指向的是Object.prototype。因此,这个比较返回true。

    接下来,我们来看第二个问题,为什么console.log(Person.prototype.__proto__ instanceof Object)返回false。这是因为instanceof操作符用于检查一个对象是否属于某个具体的类型(构造函数)。在这种情况下,Person.prototype.__proto__实际上是一个普通的对象(Object类型)并不属于Object构造函数,所以返回false。

    对于第三个问题,Object.prototype是所有JavaScript对象的顶级原型对象。它不是任何构造函数的实例,而是所有构造函数的原型对象的原型。换句话说,Object.prototype是原型链的顶端。所以,Object.prototype的对象类型是自身,它的instanceof判断结果也是自身。

    所以,根据以上解释,下面是代码的清晰解答:

    console.log(Person.prototype.__proto__ == Object.prototype); // 返回true
    
    console.log(Person.prototype.__proto__ instanceof Object); // 返回false
    
    console.log(Object.prototype instanceof Object); // 返回true
    console.log(Object.prototype instanceof Object.prototype); // 返回 false
    

    希望这能帮助你理解__proto__和instanceof的使用。如果你有更多问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

你好!在JavaScript中,每个对象都有一个内置属性,称为其原型。原型本身是一个对象,因此原型将具有其自己的原型,从而形成所谓的原型链。当我们到达具有null作为其自己的原型的原型时,链就结束了。
在JavaScript中,每个函数都有一个prototype属性,它是一个对象。当我们使用new关键字创建一个函数的实例时,该实例将继承该函数的prototype属性。
在你的代码中,Person.prototype.proto == Object.prototype返回true,因为Person是一个构造函数,所以它会创建一个prototype属性。由于prototype也是一个对象,因此它本身具有一个__proto__属性(该属性仅适用于某些浏览器),实际上是实例的内部[[Prototype]]这个特性被赋值为构造函数的原型对象。也就是说prototype的原型是Object.prototype(也就是说该对象prototype的构造函数是Object或者换一种说法也就是prototype的对象类型是Object)。
console.log(Person.prototype.proto instanceof Object)返回false,因为Person.prototype.__proto__不是Object.prototype的实例。Object.prototype这个对象不是Object的实例。
console.log(Object.prototype instanceof Object)返回false,因为Object.prototype不是Object的实例。
Object.prototype.proto 的对象类型是null。
希望这能帮到你!