对象函数原型

ops/2024/12/13 2:43:16/

对象

创建对象

  1. 字面量{}
  2. new Object()

本质都是调用了Object构造函数,因此实例对象的__proto__指向Object.prototype对象

对象属性控制符

设置属性(默认属性描述符为false)

  1. Object.defineProperty(obj,key,{属性描述符})
  2. `Object.defineProperties(obj,{key:{属性描述符},key2:{属性描述符}})
    获取属性描述符
  3. Object.getOwnPropertyDescriptor(obj,key)
  4. Object.getOwnPropertyDescriptors(obj)
    `
    禁止添加新属性
  5. Object.preventExtensions(obj)
    禁止对象配置/删除已有的属性
  6. Object.seal(obj)
    不能修改属性
  7. Object.freeze(obj)

属性描述符

数据属性

  • configurable 对象属性配置
  • enumrable 对象属性枚举
  • value
  • writable 对象属性修改
    存取属性
  • configurable
  • enumrable
  • get
  • set

存取属性用于

let obj={
__name:"lxy",
get name(){
return this._name
}
set name(){
this._name=name
}
}

函数

构造函数
new+Foo()
这种形式的函数称之为构造函数,一般首字母大写
执行流程

  1. 内存中创建一个空对象{},暂时称之为a
  2. 将构造函数内部this指向a
  3. a对象的__proto__指向构造函数的显式原型对象prototype
  4. 执行构造函数体代码
  5. 若函数内部没有返回值,自动返回a对象

原型

  1. 任何对象都有原型对象[ [proto] ],通过_proto_获取,对象本质由new Object()创建,对象的__proto__指向Object.prototype
  2. 函数也是对象,也有_proto_,函数本质由new Function()创造,函数的__proto__指向Function.prototype
  3. 函数是特殊的对象,还有显式原型对象prototype
  4. 通过构造函数new出来的对象的原型指向构造函数的prototype,prototype对象的原型指向自己构造函数的原型,这样形成的层级关系称之为原型链

函数与原型

  1. 函数是对象有原型对象[ [proto ]] (浏览器提供__proto__形式访问)
  2. 函数是特殊的对象有显式原型prototype
  3. 这里函数的原型对象一般指的是prototye
  4. prototype中的constructor指向构造函数

作用:
当对象中获取属性,会触发get操作,首先从当前的对象寻找属性,找不到就沿着原型链寻找
在编译阶段
内存中存放函数对象,函数对象中
有父级作用域,代码,prototype原型对象
什么时候查找停止
查找到Object.prototype
constructor
构造器属性,指向构造函数
Object.defineProperty(obj,‘constructor’,{value:fn})

对象与原型

  1. 对象都有原型对象[ [ proto] ],浏览器提供__proto__api来访问
  2. 通过构造函数new出来的对象__proto__ 指向构造函数的prototype对象,
  3. prototype对象也是对象,它的__proto__指向它的构造函数的prototype,这样一层层指上去构成了链式结构原型链
  4. 原型链的终点是Object构造函数的prototype对象因为通过{}创建出的对象实质上是调用了new Object()函数

顶层原型对象有许多默认的属性与方法

Object.prototype={
_ _proto:null,
constructor: {}
toString:{}
isPrototypeOf:{}
}

方法 Object.getPrototypeOf(obj)获得对象原型 hasOwnProperty()是否是自己的属性,不包括原型上的 in,key in obj,只要存在在自己或者原型上就为true instanceof 判断构造函数的原型是否出现在实例的原型链上 isPropertyOf判断对象`是否出现在实例的原型链上

在这里插入图片描述


http://www.ppmy.cn/ops/141412.html

相关文章

【单片机外设】MPU及Cache学习与开发

该篇主要:参考正点原子教程和安富莱教程 安富莱_STM32-V7_MPU及Cache部分.pdf 目录 1. 内存保护单元(MPU)介绍(了解) 1.1. 内存保护单元(memory protection unit),简称:MPU 1.1.1. MPU的功能…

解决 Nginx 部署 React 项目时的重定向循环问题

Nginx 错误日志中的以下错误信息: 2024/12/11 11:28:44 [error] 37#37: *6 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 61.169.61.66, server: cms.stormsha.com, request: "GET / HTTP/1.1&q…

【Python】【Conda 】Conda 与 venv 虚拟环境优缺点全解:如何做出明智选择

目录 引言一、基本概念1.1 Conda 虚拟环境1.2 Python venv 虚拟环境 二、主要区别对比三、优缺点分析3.1 Conda 虚拟环境的优缺点3.2 Python venv 虚拟环境的优缺点 四、使用场景推荐4.1 使用 Conda 虚拟环境的场景4.2 使用 Python venv 虚拟环境的场景 五、虚拟环境管理工具对…

亚马逊云科技re:Invent大会:数据与AI如何颠覆企业未来?

在数字化转型浪潮席卷全球的今天,云计算与人工智能已成为推动企业发展的核心引擎。近日,2024亚马逊云科技re:Invent大会的第三日,不仅见证了技术领域的最新突破,更揭示了企业智能化转型的未来方向。这场技术盛宴让我们深刻感受到数…

学习solid works第五课------拉伸凸台

一、绘制平面草图 草图按照前面几节课的教程,我们快速画一个简单的草图用于演示拉伸功能。 二、拉伸凸台 1、拉伸凸台时需要推出草图绘制,然后在设计树中选中草图,选项栏中选择特征,点击拉伸凸台/基体。 2、拉伸凸台有多种参数…

Grafana功能菜单介绍

Grafana的功能菜单设计为侧边栏(sidebar)形式,可以折叠隐藏,便于我们更加专注数据的可视化。现将菜单栏各项功能进行编号讲解,如下图所示: ① Grafana Logo 在这里插入图片描述 点击Grafana的logo&#xf…

Windows平台Unity3D下RTMP播放器低延迟设计探讨

技术背景 好多开发者希望我们分享下大牛直播SDK是如何在Unity下实现低延迟的RTMP播放的,以下是一些降低 Unity 中 RTMP 播放器延迟的方法: 一、选择合适的播放插件或工具 评估和选用专业的流媒体插件 市场上有一些专门为 Unity 设计的流媒体插件&…

docker安装ddns-go(外网连接局域网)

docker先下载镜像,目前最新版是v6.7.6 也可以csdn资源下载 再导入dockers https://download.csdn.net/download/u014756339/90096748 docker load -i ddns-go.tar 启动 docker run -d --name ddns-go --restartalways --nethost -v /opt/ddns-go:/root jeessy/…