一、什么是原型
js中一切皆对象,对象创建时会关联一个原型对象,这个原型对象包含了可以继承的属性和方法,而对象都会有个内置的__proto__属性([[Prototype]]),__proto__指向的就是原型对象
二、Object.getPrototypeOf可查看对象的原型对象
以num为例,Object.getPrototypeOf(num)能打印出来数字类型指向的原型,原型对象上的方法也能一览无余
let obj = {a:1,b:2}
let fn = function(a){}
let num = 1
let str = '1'
console.dir(fn)
console.dir(obj)
console.log(Object.getPrototypeOf(num));
console.log(Object.getPrototypeOf(str))
三、obj.hasOwnProperty()
obj.hasOwnProperty(key)判断对象是否有该属性,不包括__proto__
四、什么是原型链
原型链可以理解为是一个查找机制,当访问对象中的属性,如果对象上没有该属性,那么就会查找他的显示原型(prototype)和隐式原型(__proto__)对象上是否有该属性,如果有就可以使用
五、__proto__和prototype区别
1、什么__proto__
__proto__是对象创建时内置的一个属性,也可以称为隐形原型,他的功能是指向该对象的原型,从而使该对象继承原型对象的方法和属性
2、什么是prototype
prototype是函数对象独有的属性,也可以称为显示原型,该属性指向该函数的原型对象。例如,fn.prototype
指向函数fn
的原型对象。
3、两者区别
prototype是函数对象独有的,而__proto__是所有的对象都有,
实例化对象的__proto__指向构建函数的prototype