“ __proto__”和“ prototype”有什么区别?


回答 1:

  • __proto__是实际的原型,但不要使用它。.constructor.prototype应该做与__proto__相同的事情,但是它大部分都是坏的。函数的.prototype实际上是它所制造的东西的原型,而不是它的原型。

原型

.__ proto__

__proto__

__proto__

实际上是

。原型

函数原型

__proto__

.constructor.prototype

.constructor

Object.isPrototypeOf

Object.getPrototypeOf


回答 2:

JavaScript中的对象编程被称为“基于原型”

要定义继承的API,您可以创建一个原型对象,该对象具有方法以及一些属性默认值。

所有`Function`实例(函数是JavaScript中的对象)均具有默认的空`prototype`属性,可以扩展或替换该属性。如果使用new操作符将该函数作为构造函数调用,则此prototype属性将成为实例的内部[Prototype]属性,从中搜索其继承的API。

这个原型也可以定义为一个普通的新对象并手动注入:

  • 通过Object.setPrototypeOf()在现有对象上使用,通过Object.create()在不使用构造函数的情况下使用,通过文字影响,Object.assign()或Object.defineProperty()覆盖默认的函数原型属性

长期以来,无法正式访问对象的内部[原型]以进行检查或修改。一种实现方法是检查对象的继承的“ constructor”属性,但是它很容易被自身覆盖。

然后Mozilla引入了非官方的__proto__助手。

然后,TC39(ECMAScript工作组)定义了setPrototypeOf()/ getPrototypeOf()官方API。

然后再次通过TC39,验证了__proto__ API