- 每个对象都有一个
__proto__
属性,指向它的 prototype 原型对象 - 每个构造函数都有一个 prototype 原型对象
- prototype 原型对象里的 constructor 指向构造函数本身
![示例](https://i-blog.csdnimg.cn/blog_migrate/c013e9fd1442e2c0dc123ae05c8ec44d.png#pic_center)
prototype 和 __proto__
有什么用处?
- 实例对象的
__proto__
属性指向构造函数的 prototype,从而实现继承。 - prototype 对象相当于特定类型所有实例对象都可以访问的公共容器。
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayhello = function() {
console.log("Hello I'm " + this.name)
}
var p1 = new Person("Mike", 20)
var p2 = new Person("John", 23)
p1.sayhello() // "Hello I'm Mike"
p2.sayhello() // "Hello I'm John"
![构造函数 实例](https://i-blog.csdnimg.cn/blog_migrate/37840fab980fecc51cb6f08ac7818125.png#pic_center)
- new 一个函数会创建一个对象
函数.prototype === 被创建对象.__proto__
- 一切函数都是由 Function 函数创建
Function.prototype === 被创建函数.__proto__
- 一切函数的 prototype 原型对象都是由 Object 函数创建
Object.prototype === 一切函数.prototype.__proto__
![Object Function 函数](https://i-blog.csdnimg.cn/blog_migrate/0342f7375706167fc1429e3695c74121.png#pic_center)