当前位置: 首页 > news >正文

原型链(回顾)

  • 概念
  • prototype
  • __proto__
  • 原型链查找机制
  • 万物皆对象
  • 判断私有/共有属性方法
  • Object.prototype.prototype === null
  • Object.create(proto, [propertiesObject])
  • 给类的原型上扩展属性方法的4种方法
  • Fn.prototype.xxx = xxx
  • Object.prototype.xxx = xxx
  • f1.proto.xxx = xxx
  • 原型重定向

概念

原型:每个函数都有一个属性(原型对象):prototype ==》对象
构造函数:在prototype原型对象中,默认存在一个内置属性:constructor ==》函数
属性值就是当前函数本身,可修改
原型链:每个对象都具有一个属性:__proto__ ==> 对象
属性值就是当前实例所属类的prototype原型对象

原型链查找机制

  1. 首先找自己的私有属性,私有属性有,则调取私有属性
  2. 如果没有,默认基于__proto__原型链,找所属类prototype原型对象上的公共属性和方法
  3. 如果没有,则沿着prototype原型对象的__proto__原型链继续往上找
    直到找到Object.prototype原型对象为止
    在这里插入图片描述

万物皆对象

JS的所有值(除了undefined,null),基于__proto__原型链,都能找到Object.prototype原型对象,都是对象类的实例,也就是对象

Object.prototype.proto === null

Object的prototype原型对象是所有对象的基类,__proto__原型链属性为 null

Object.create(proto,[propertiesObject])

定义:创建一个新对象
参数1:指定该对象的prototype原型对象,必须为对象或null
参数2:传入一个对象(描述对象),默认为undefined

var obj = Object.create({ a: 1 }, {// foo会成为所创建对象的数据属性b: {writable: true,//是否可重写configurable: true,//是否可枚举enumerable: true,//是否可删除和修改特征value: "hello"//属性的值},// bar会成为所创建对象的访问器属性c: {get: function () { return 10 },// 取值器set: function (value) { // 赋值器console.log("设置的值为", value);}}
})

Object.create(null)

定义:创建一个所属类的prototype原型对象为null的空对象

var obj = Object.create(null);
console.log(obj.prototype);//undefined  对象没有pototype这个属性
console.log(obj.__proto__);// undefined 

给类的原型上扩展属性方法的4种方法

  1. Fn.prototype.xxx = xxx
    向默认开辟的堆内存中扩展属性方法
  2. Object.prototype.xxx = xxx
    内置类原型上扩展方法
  3. f1.proto.xxx = xxx
    基于实例的所属类的原型对象上扩展属性方法
    注意:IE中,禁止操作__proto__
  4. 原型重定向
    手动开辟一个堆内存赋值给 fn.prototype

例题
经典题目1
经典题目2

http://www.lryc.cn/news/32245.html

相关文章:

  • DS内排—2-路归并排序
  • 深度账户抽象(Account Abstraction)第 3 部分:Wallet创建
  • 代码分享:面波数据快速成图
  • 常见数据结构
  • Mycat
  • Java 编写Vue组件(VueGWT的初尝试)
  • 【第二章 @RequestMapping注解(value,method,params属性),springMVC支持ant风格的路径,支持路径中的占位符】
  • QML Text详解
  • xxl-job启用https访问
  • 2023FL Studio最新中文版电子音乐、混音和母带制作DAW
  • pytorch 35 yolov5_obb项目解读+使用技巧+调优经验(提升map)
  • OpenMv H7 口罩识别--毕业设计学习记录
  • 有什么比较好的bug管理工具?5款热门工具推荐
  • 第五章 opengl之摄像机
  • nginx配置详解(容器、负载)—官方原版
  • 2023年中职网络安全竞赛——CMS网站渗透解析
  • SQL 窗口函数详解
  • Android 12系统源码_SystemUI(六)显示和隐藏最近任务
  • Docekr三剑客之 Docekr compose
  • 企业是否具备等保测评资质在哪里查?怎么查?
  • Spacedesk软件推荐,让你的平板也变成电脑的副屏
  • Vue 3.0 组合式API 介绍 【Vue3 从零开始】
  • 【算法数据结构体系篇class13、14】:贪心算法思想
  • C++知识点,关键字inline ,String,强制类型转化
  • MyBatis源码分析(六)MetaObject工具类的使用与源码分析
  • 文献资源最多的文献下载神器,99.99%的文献都可下载
  • 工控机ARM工业边缘计算机搭建Node-Red环境
  • 位图/布隆过滤器/海量数据处理方式
  • Tomcat 配置文件数据库密码加密
  • k8s-Kubernetes集群部署