什么是原型和原型链、__proto__与prototype区别

一、什么是原型

        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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值