我一直在阅读javascript的constructor
和__proto__
。我想我明白__proto__
属性的基本知识,但是我对constrcutor
属性有点麻烦。这是我目前为止所了解的有关这两个属性的信息,如果我错了,请纠正我,或者如果我错过了某些要点,请添加。 javascript中的每个对象都有一个名为__proto__
的“隐藏”属性,默认情况下指向Object.prototype
。现在,当使用new创建对象的实例时。修改此属性的值并分配对象ConstructorName.prototype
。我不确定什么__proto__
的默认值是在调用new
之前。现在关于.constructor
我有点困惑我看了this,到目前为止认为constructor
属性默认是空的,当新的被调用时constrcutor
被修改并分配了ConstructorName.prototype.constructor
。请让我知道我是否朝着正确的方向前进。关于构造函数和__proto__属性的说明
0
A
回答
1
在javascript每个对象都有一个 “隐藏” 的属性称为
__proto__
号隐藏属性称为[[原型]]。 .__proto__
是访问它弃用吸气,你应该使用Object.getPrototypeOf
它默认指向
Object.prototype
。
“default”可能会引起误解 - 取决于对象的创建方式。对于普通对象文字,是的,它是Object.prototype
。
现在,当一个对象的实例使用new创建。此属性的值将被修改并分配给对象
ConstructorName.prototype
。我不确定__proto__
的默认值是在新的被调用之前。
在此之前没有任何价值。该对象是在原型从一开始就被设置的情况下创建的。在调用new
之前,没有任何对象。
现在关于
.constructor
我有点困惑我读到这也是迄今为止相信在默认情况下是constructor属性是空的,被调用的新当constrcutor被修改,分配ConstructorName.prototype.constructor
。
不,没有任何东西被分配到任何地方,没有.constructor
属性的实例。他们做继承财产(连同其他人)从.prototype
对象。 在创建ConstructorName
函数的实例中创建了ConstructorName.prototype.constructor
属性。
相关问题
- 1. 构造函数的__proto__属性指向什么?
- 2. Javascript:为什么是构造函数的__proto__属性Empty(){}?
- 3. 关于HTML5 pubdate属性的说明
- 4. rails中的属性和构造函数
- 5. 关于数据结构的说明
- 6. __proto__实例和其构造的在JavaScript
- 7. 在构造函数旁声明的属性
- 8. 属性构造函数的默认值?
- 9. 有关EclipseLink JPA属性的说明
- 10. 为什么和如何__proto__记得构造函数的未定义原型成员的旧属性?
- 11. C++:“错误C4430:缺少类型说明符 - 假定INT”对于构造和无效的声明析构函数
- 12. 关于C++构造函数的问题
- 13. 关于构造函数的问题
- 14. 关于构建OpenJDK的说明
- 15. ES7类:在构造函数外声明属性
- 16. 获取属性构造函数声明为
- 17. 构造函数属性 - 关联预先存在的对象?
- 18. 属性类不调用构造函数
- 19. 属性未被构造函数定义
- 20. 关于移动构造函数
- 21. 与构造函数参数的统一性和依赖关系
- 22. 如何在jsdoc中记录函数和函数构造函数的属性?
- 23. 使用构造函数声明(构造函数?)
- 24. 带开放式构造函数参数的参数属性声明
- 25. actiuon脚本3默认构造函数说明
- 26. Objective-C的属性说明
- 27. 没有显式构造函数和只读属性的C#类
- 28. Asp.Net WebAPI和AttributeRouting - 没有重载的属性构造函数?
- 29. JS中的原型和构造函数属性
- 30. 意外的C#行为与自动属性和构造函数
感谢您的帖子。你提到“在调用new之前,没有任何对象”,在这个问题的部分我要问的是,当我们在这种情况下声明一个普通对象(即)'foo = {}'时,默认的'foo .__ proto__ = Object.prototype',一旦我们通过做'var f = new foo()'来创建一个实例,那么'f .__ proto__ = foo.prototype'我是否正确? –
是的。 'foo = {}'等价于'foo = Object.create(Object.prototype)','f = new foo'等同于'f = Object.create(foo.prototype); f.constructor()' – Bergi
好的感谢清理。你提到的最后一个问题是“实例上没有.constructor属性,它们继承了.prototype对象的属性(以及其他属性)。” 。第一个例子中的链接http://javascript.info/tutorial/constructor似乎表明该实例具有属性'.constructor'(ie)'alert(rabbit.constructor == Rabbit)// true'我是一个这里一点困惑。我在这里详细介绍吗? –