JS对象漫笔

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组织函数、原型对象相互之间胶葛不休,你中有我,我中有你。

    原文作者:witzzy
    原文地址: https://segmentfault.com/a/1190000008095884
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞