Javascript继承:原型链如何在本机原型之间工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript继承:原型链如何在本机原型之间工作相关的知识,希望对你有一定的参考价值。

我们知道javascript中的所有内容都继承自Object

Inheritance

因此,如果我使用如下所示的构造函数创建对象:

function Rabbit() {
  this.color = 'White'
}

let obj = new Rabbit();

alert(Rabbit.__proto__ === Function.prototype)       //true
alert(obj.__proto__ === Rabbit.prototype)            //true       
alert(obj.__proto__.__proto__ === Object.prototype)  //true

alert(Function.__proto__ === Object.prototype)  //false
alert(Object.getPrototypeOf(Function) === Object.getPrototypeOf(Object))  //true

前三个结果很有意义,因为obj继承自Rabbit函数,该函数本身也继承自Function。但是,如果Function继承自Object,那么为什么是第四个结果False。另外,为什么ObjectFunction都具有相同的原型(最后结果)?

有人可以解释这种行为。我在这里想念什么吗?

答案
alert(Object.getPrototypeOf(Function) === Object.getPrototypeOf(Object)) // true

FunctionObject都是函数,它们的原型是Function.prototype。可以通过

验证
Object.getPrototypeOf(Function) === Function.prototype // true
Object.getPrototypeOf(Object) === Function.prototype // true

此对象用于创建Function函数的原型,因此

Function.__proto__ === Function.prototype // true

而不是

Function.__proto__ === Object.prototype // false

alert(Object.getPrototypeOf(Function) === Function.prototype)
alert(Object.getPrototypeOf(Object) === Function.prototype)
alert(Function.__proto__ === Function.prototype)
另一答案

您将函数构造函数的原型Function.__proto__(等效地Object.getPrototypeOf(Function))与函数原型Function.prototype.__proto__混淆。

function Rabbit() {
  this.color = 'White'
}

let obj = new Rabbit();

console.log(Rabbit.__proto__ === Function.prototype)       //true
console.log(obj.__proto__ === Rabbit.prototype)            //true       
console.log(obj.__proto__.__proto__ === Object.prototype)  //true

console.log(Function.prototype.__proto__ === Object.prototype)  //true
console.log(Object.getPrototypeOf(Function.prototype) === Object.getPrototypeOf(Object.prototype))  //false
另一答案

这样的问题最好用图像来解释(就像您的问题):

enter image description here

基本上,Function__proto__ === prototype的唯一对象。

以上是关于Javascript继承:原型链如何在本机原型之间工作的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的原型和原型链

JavaScript原型链的理解

JavaScript原型链

Javascript的原型原型链原型链继承

JavaScript高级原型和继承相关:原型对象函数原型原型链和继承继承的优化对象判断相关方法

JavaScript高级原型和继承相关:原型对象函数原型原型链和继承继承的优化对象判断相关方法