gpt4 book ai didi

javascript - 函数对象 __proto__ 和原型(prototype)属性

转载 作者:行者123 更新时间:2023-11-29 18:00:25 24 4
gpt4 key购买 nike

我正在尝试找出我编写的函数的原型(prototype)链

function Animal(voice)
{
this.voice = voice|| 'meaw'
}

Animal.prototype.speak =function() {
console.log(this.voice);
}

我知道 Animal 函数有一个原型(prototype)属性指向它的原型(prototype)对象。它的原型(prototype)对象具有指向后方的构造函数和指向 Object 对象原型(prototype)的 __proto__ 属性

我知道每个函数对象都继承自 Function 的对象 prototype 并且继承自 Object 的对象 prototype 包括 __proto__ 属性。现在,当我进一步调查时,我发现 Function 的 对象 prototype__proto__ 属性链接到同一个原型(prototype)对象。

console.log(Animal.__proto__.constructor.__proto__  == Animal.__proto__.constructor.prototype ); //true
console.log(Animal.__proto__.constructor.__proto__ == Animal.__proto__); //true

然后我做了进一步的测试来证明这一点

Animal.__proto__.constructor.__proto__.test = 28;

console.log(Animal.__proto__.constructor.__proto__.test); // prints 28
console.log(Animal.__proto__.test); //prints 28

这意味着它的原型(prototype)和它继承的原型(prototype)是相同的。有什么理由这样设置的吗?

最佳答案

您已经知道 Object.getPrototypeOf(Animal)(或 Animal.__proto__)是 Function.prototype object .所以让我们放弃 Animal 的东西,然后用 Function.prototype 重复你的方程式:

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

现在,Function.prototype.constructor 属性(就像所有定义明确的原型(prototype)对象一样)指向其各自的构造函数,Function constructor function .所以我们有

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

现在,鉴于 Function 是一个函数,只有它像所有其他函数一样从 Function.prototype 继承才有意义。

这就是你的测试所证实的,基本上就是这样

Function.__proto__.test = 28;

Function.__proto__.test // 28
Function.prototype.test // 28

是的,Function.testAnimal.test 现在也会产生 28

关于javascript - 函数对象 __proto__ 和原型(prototype)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35342916/

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