首先从题目来检查下掌握程度
let Person = function(){
this.name = 'Person'
}
Person.prototype.age = 22
let p1 = new Person()
问题是以下都是结果是什么
1. p1.__proto__
2. Person.__proto__
3. Person.prototype.__proto__
4. Object.__proto__
5. Object.prototype.__proto__
6. Function.__proto__
7. Function.prototype
8. Function.prototype.__proto__
9. p1.constructor
10. Person.prototype.constructor
11. Person.constructor
12. Function.constructor
13. Object.constructor
1. p1.__proto__ === Person.prototype
2. Person.__proto__ === Function.prototype
3. Person.prototype.__proto__ === Object.prototype
4. Object.__proto__ === Function.prototype
5. Object.prototype.__proto__ === null
6. Function.__proto__ === Function.prototype
7. Function.prototype 是唯一一个prototype是function的构造器,且其__proto__指向Object.prototype,
8. Function.prototype.__proto__ === Object.prototype
9. p1.constructor === Person
10. Person.prototype.constructor === Person
11. Person.constructor === Function
12. Function.constructor === Function
13. Object.constructor === Function
- 所有对象的
__proto__
都指向其构造器的 prototype - Function.prototype也是唯一一个typeof XXX.prototype为 function的prototype。其它的构造器的prototype都是一个对象
- 只有函数对象才有 prototype 属性
- 每个对象都有一个 constructor 属性,可以获取它的构造器
- 所有的构造器都来自于 Function.prototype,甚至包括根构造器Object及Function自身。
- 实例的构造函数属性(constructor)指向构造函数。
- 凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。
- 连接存在于实例(p1)与构造函数(Person)的原型对象(Person.prototype)之间,而不是存在于实例(p1)与构造函数(Person)之间。
- instanceof的原理是判断实例对象的proto和构造函数的prototype是否是同一个引用
- 关系图,图中由相互关联的原型组成的链状结构就是原型链,也就是蓝色的这条线 原型链
网友评论