JavaScript高级重点整理(二、原型链、上下文和作用域)

原型

​ 每个函数都有一个prototype属性,它默认指向一个Object对象(原型对象)说它是空的是因为它没有我们自己定义的属性,这个对象里只有constructor属性(指向这个函数对象),还有一个__proto__指向这个Object原型对象的原型对象。
函数的所有实例对象都自动拥有原型中的属性(方法)

实例对象的__proto__等于它的构造函数的prototype
在这里插入图片描述

原型链

在这里插入图片描述
总结

  1. 好多函数的声明比如function Fun(){}其实就是 var Fun = new Function();

  2. 实例对象寻找属性

    • 先在自身属性中查找,找到返回
    • 如果没有, 再沿着__proto__这条链向上查找, 找到返回
    • 如果最终没找到, 返回undefined
  3. 设置对象的属性值时: 不会查找原型链, 如果当前对象中没有此属性, 直接添加此属性并设置其值

  4. 方法一般定义在原型中, 属性一般通过构造函数定义在对象本身上

  5. 其中的特例就是Function它自己构造自己

instanceof

instanceof的判断流程

  • 表达式: A instanceof B
  • 如果B函数的显式原型对象在A对象的(隐式)原型链上, 返回true, 否则返回false
一些易错的情况
console.log(Object instanceof Function);//true
console.log(Object instanceof Object);//true
console.log(Function instanceof Function);//true
console.log(Function instanceof Object);//true

function Foo() {
   }
console.log(Object instanceof  Foo);//false

下面来对应分条解释:

  1. Object构造函数本身也是对象,它的__proto__是Function构造函数的prototype
  2. Object构造函数的__proto__是Function构造函数的prototype,Function构造函数的原型对象的__proto__又是Object的构造函数的prototype
  3. 这里是特例Function = new Function(),Function的prototype和__proto__相等
  4. Function对象的__proto__是Function的prototype,Function的prototype的__proto__是Object的prototype
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值