prototype
每个"函数"中都有一个默认的属性, 叫做 prototype, prototype属性保存着一个对象, 这个对象我们称之为"原型对象", prototype 指向它的原型对象 。
每个"原型对象"中都有一个默认的属性, 叫做constructor, constructor 指向当前原型对象对应的那个"构造函数"。
_ _ proto _ _
通过构造函数创建出来的对象我们称之为"实例对象", 每个"实例对象"中都有一个默认的属性, 叫做__proto__, __proto__
指向创建它的那个构造函数的"原型对象"。
例如: var obj = new Option()
obj 即为实例对象。
_ _ proto _ _和 prototype的关系
基本关系
- 所有函数都是Function构造函数的实例对象
- 所有函数都是对象, 包括Function构造函数
- 所有对象都有__proto__属性
- 普通对象的__proto__属性指向创建它的那个构造函数对应的"原型对象"
特殊关系
- 所有对象的__proto__属性最终都会指向"Object原型对象"
- "Object原型对象"的__proto__属性指向NULL
function Test() {}
console.log(Test.prototype);
const test = new Test()
console.log(test);
console.log(test.__proto__ == Test.prototype);