资讯专栏INFORMATION COLUMN

JS对象随笔

Lin_YT / 2368人阅读

摘要:原型对象对象的原型对象实质上是对象的构造函数的原型对象。构造函数所有的对象都是通过构造函数实例化出来的。即一个对象,如果沿着原型链找下去,最终都会找到构造函数原型对象相互之间纠缠不休,你中有我,我中有你。

JS中的对象

JS中对象(若无特殊说明,本文中的对象都为对象实例,即使是空对象实例)可谓是一个核心的概念,纵观整个JS的数据结构如StringNumberArrayBoolean等,都有其对应的对象。细细数来,感觉上就是JS里一切数据皆对象(除了纯数字、nullundefined外,其他数据都可以访问到__proto__属性)。本文将浅析一下JS中的对象及相关概念。

对象的属性

JS中的对象本质上就是一个若干个无序的键值对组成的集合。每个键值对就是对象的属性或方法。而对象中的每个属性都对应着有属性描述符,属性描述符分为数据描述符和存储描述符。属性描述符又包含了以下几个属性。

数据描述符和存取描述符均具有以下可选键值:

configurable
当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,也能够被删除。默认为 false。
enumerable
当且仅当该属性的 enumerable 为 true 时,该属性才能够出现在对象的枚举属性中。默认为 false。
数据描述符同时具有以下可选键值:

value
该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。
writable
当且仅当该属性的 writable 为 true 时,该属性才能被赋值运算符改变。默认为 false。
存取描述符同时具有以下可选键值:

get
一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。该方法返回值被用作属性值。默认为 >undefined。
set
一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。该方法将接受唯一参数,并将该参数的新值>分配给该属性。默认为 undefined。

对象的属性和方法中有几个特殊的存在:

constructor

该属性指向对象的构造函数

__proto__(非标准,不推荐使用)

该属性指向对象的构造函数的原型对象,因为对象没有prototype属性,所以通过该属性指向它。此属性为访问器属性,不推荐使用。若需要获取对象的原型对象可以用Object.getPrototypeOf(obj)来获取。

通过对象访问的属性和方法除了来自对象自身定义的以外,还有从其原型链上继承的属性和方法。

原型对象

对象的原型对象实质上是对象的构造函数的原型对象。可以用Object.setPrototypeOf(obj,prototype)改变对象的原型对象。
访问对象的原型对象有两种方法,一是通过内置属性 __proto__访问,二是通过Object方法Object.getPrototypeOf(obj)访问。两种方法都有其局限性,第一种方法不是ES标准所支持的,虽然ES6已经支持了。因为__proto__属性时访问器属性,所以可以修改对象的原型对象(这样很影响性能)。第二种方法在IE浏览器中的支持情况是IE9+。总体上讲,推荐第二种方法去访问对象的原型对象。如果想要替换原型对象,则可用 Object.setPrototypeOf(obj,prototype)重新设置其原型对象。

构造函数

所有的对象都是通过构造函数实例化出来的。Object也不例外。
对象的构造函数恒等于实例出该对象的构造函数的原型对象的constructor属性指向的函数。即

var obj = new A(); 
obj.constructor===A.prototype.constructor

一个对象,如果沿着原型链找下去,最终都会找到Object构造函数、原型对象相互之间纠缠不休,你中有我,我中有你。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81191.html

相关文章

  • 前端随笔(杂谈)

    摘要:经过对前端技术的学习,感触良多,虽然之前也接触过前端的知识,但是没有进行系统的学习过,在大三上学期学过和简单的,老师也没有深度讲解,知识也没有形成体系,经过一段时间的学习,有以下感触与大家分享整个前端知识就像一座房子,而是砖,建一个网页,里经过对前端技术的学习,感触良多,虽然之前也接触过前端的知识,但是没有进行系统的学习过,在大三上学期学过h5和简单的css,老师也没有深度讲解,知识也没有形...

    caohaoyu 评论0 收藏0
  • 继承的实现方式及原型概述 | JavaScript 随笔

    摘要:每一个对象直接量都是的子类,即构造函数中的构造函数与普通函数并没有什么两样,只不过在调用时,前面加上了关键字,就当成是构造函数了。由于没有传入变量,在调用的构造函数时,会出错这个问题可以通过一个空对象来解决改自。 showImg(https://segmentfault.com/img/bVmNZj); 对于 OO 语言,有一句话叫Everything is object,虽然 Ja...

    chenjiang3 评论0 收藏0
  • [JavaScript 随笔] 垃圾回收

    摘要:在中,由于垃圾回收是自动进行的,所以人们在编码时可能不太会注意这方面。时,引擎统一对所有这些状态的对象进行回收。,表示释放该对象后能得到的内存大小。 在 JavaScript 中,由于垃圾回收是自动进行的,所以人们在编码时可能不太会注意这方面。但事实是,一些 webapp 在使用一段时间后,会出现卡顿的现象,特别是那些单页应用,包括 WebView 方式的手机 app 。这个现象在传统...

    ConardLi 评论0 收藏0
  • [JavaScript 随笔] 关于 this 你必须知道这几点

    摘要:关于中的坑大家都踩过。那这里的和是严格相等的。这里介绍的是通过创建对象时的。提示一下,数组对象的函数本身就是有这个功能的,也就是说可以达到要求。事件有两种记法,一个是也是类似,那么在中出现的表示触发该事件的元素,也就是。 TL;DR: this 指向调用该方法的对象,只有函数执行时,this 才有定义。 关于 JavaScript 中 this 的坑大家都踩过。像本文开头的这句话,道理...

    邹强 评论0 收藏0

发表评论

0条评论

Lin_YT

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<