Open logan70 opened 4 years ago
原型
JavaScript中,一个对象从被创建开始就和另一个对象关联,从另一个对象上继承其属性,这个另一个对象就是原型。
另一个对象
获取原型的方法
Object.getPrototypeOf(obj)
obj
new
prototype
const obj = {} expect(Object.getPrototypeOf(obj) === Object.prototype).toBe(true)
原型链
当访问一个对象的属性时,先在对象的本身找,找不到就去对象的原型上找,如果还是找不到,就去对象的原型(原型也是对象,也有它自己的原型)的原型上找,如此继续,直到找到为止,或者查找到最顶层的原型对象中也没有找到,就结束查找,返回undefined。这条由对象及其原型组成的链就叫做原型链。
undefined
原型链顶层
普通对象可以理解为Object构造函数创建的,即普通对象的原型都指向Object.prototype,Object.prototype也是个对象,但是其原型比较特殊,为null,是原型链的顶层,切记!!!
Object
Object.prototype
null
expect(Object.getPrototypeOf({})).toBe(Object.prototype) expect(Object.getPrototypeOf(Object.prototype)).toBe(null)
构造函数的原型
函数,包括构造函数都可理解为由构造函数Function创建,Function本身也不例外。
Function
const getProto = Object.getPrototypeOf const FuncProto = Function.prototype expect(getProto(Function)).toBe(FuncProto) expect(getProto(Object)).toBe(FuncProto) expect(getProto(Number)).toBe(FuncProto) expect(getProto(Symbol)).toBe(FuncProto) expect(getProto(Array)).toBe(FuncProto)
原型及JavaScript中的原型规则
原型与原型链
原型
JavaScript中,一个对象从被创建开始就和另一个对象关联,从另一个对象上继承其属性,这个
另一个对象
就是原型。获取原型的方法
Object.getPrototypeOf(obj)
来获取obj
的原型。new
出来的(字面量对象也可以这么理解),也可以通过访问对应构造函数的prototype
属性来获取其原型。原型链
当访问一个对象的属性时,先在对象的本身找,找不到就去对象的原型上找,如果还是找不到,就去对象的原型(原型也是对象,也有它自己的原型)的原型上找,如此继续,直到找到为止,或者查找到最顶层的原型对象中也没有找到,就结束查找,返回
undefined
。这条由对象及其原型组成的链就叫做原型链。特殊原型规则
原型链顶层
普通对象可以理解为
Object
构造函数创建的,即普通对象的原型都指向Object.prototype
,Object.prototype
也是个对象,但是其原型比较特殊,为null
,是原型链的顶层,切记!!!构造函数的原型
函数,包括构造函数都可理解为由构造函数
Function
创建,Function
本身也不例外。