zoukankan      html  css  js  c++  java
  • js中的原型与原型链详解

    js中的原型与原型链详解

    记住下面三句话就可以理解原型:

    1. 所有的函数数据类型都天生自带一个属性Prototype(原型)这个属性的值是一个对象,浏览器会默认给他开辟一个堆内存
    2. 在浏览器给prototype开辟的堆内存当中有一个天生自带的属性是constructor,这个属性存储的值是当前函数本身
    3. 每一个对象都有一个__proto__的属性,这个属性指向当前实例所属类的prototype(如果不能确定他是谁的实例,都是Object的实例)

    原型链:如果引用构造函数的实例想要查找某个属性p的话:

    1. 首先会在实例内部属性中找一遍
    2. 接着会在实例.proto(构造函数.prototype)中找一遍
    3. 如果实例中还是没有,此时程序不会灰心,它会继续在实例的prototype的.__proto__中寻找,直到寻找到Object.prototype才结束,没有的话返回undefined

    这种搜索的轨迹,形似一条长链, 又因prototype在这个游戏规则中充当链接的作用,于是我们把这种实例与原型的链条称作:原型链

    判断原型与实例的关系

    1. 第一种是使用 instanceof 操作符, 只要用这个操作符来测试实例(instance)与原型链中出现过的构造函数,结果就会返回true
    alert(instance instanceof Object);//true
    alert(instance instanceof Father);//true
    alert(instance instanceof Son);//true
    
    1. 使用 isPrototypeOf() 方法, 同样只要是原型链中出现过的原型,isPrototypeOf() 方法就会返回true
    alert(Object.prototype.isPrototypeOf(instance));//true
    alert(Father.prototype.isPrototypeOf(instance));//true
    alert(Son.prototype.isPrototypeOf(instance));//true
    
  • 相关阅读:
    Http服务器实现文件上传与下载(二)
    Http服务器实现文件上传与下载(三)
    NHibernate VS IbatisNet
    5. Element-UI的基本使用
    4. Vue脚手架
    3. Vue单文件组件
    webpack中的加载器
    webpack
    02.模块化相关规范
    01.前端工程化的学习目标
  • 原文地址:https://www.cnblogs.com/my466879168/p/12332915.html
Copyright © 2011-2022 走看看