原型(prototype)
-
List item
-
**原型对象:**每个函数都有一个prototype对象,默认指向一个object空对象,即称为原型对象
**constructor:**原型对象中有一个constructor,指向函数本身(函数有prototype,prototype有constructor,指向函数)
给原型对象添加属性,实例可以访问 -
List item
显式原型和隐式原型
**显式原型:**每个函数都有一个prototype对象【创建函数的时候创建】
隐式原型:每个实例对象都有一个__proto__【创建对象的时候创建】
**注意:**对象隐式原型的值为其对应的构造函数显式原型的值
内存结构
ES5:不要直接操作隐式原型
原型链
访问对象属性时,查找顺序:
- List item
- 自身属性,找到返回
原型继承
构造函数的实例对象自动拥有构造函数原型对象的属性(方法)
- 函数的显示原型指向的对象默认是空object实例对象:默认是空的object实例对象
所有函数都是Function的实例,Function也是其自身的实例 Object的原型对象是原型链的尽头
1.读取对象的属性值的时候会自动到原型链中查找
2.设置对象的属性值时,不会查找原型链,如果当时对象中没有此属性,直接添加此属性并设置其值
3.方法一般定义在原型中,属性一般通过构造函数定义在对象本身上
instanceof(判断左边对象是不是右边对象的实例)
-
表达式:A instanceof B
如果B的显示原型对象在A的原型链上,则返回true,否则返回false
实例对象的隐式原型是构造函数的显示原型
面试题目 f.b() 不能执行
Object()是Function()的实例
所有函数都是Function()的实例,包括其本身
函数的显示原型指向的对象默认是空的Object实例对象,但是object不满足
object.prototype._ proto _ //null