对象的属性和特性

如题所述

第1个回答  2022-07-07

对象就是无序属性的集合, 其属性可以包含 基本值 , 对象 或者 函数 。属性在创建时带有一些特征值(characteristic)。

数据属性
数据属性数据属性包含一个数据值的位置,这个位置可以读写。数据属性有4个特性(attribute)。

<code><font size="4"><b>Object.defineProperty()</b></font></code> 方法用来 修改 属性的 特性 ,也可以用这个方法创建属性并设置特性。
接收三个参数,即属性所在的 对象 属性 名 (字符串形式) , 描述符对象 (用 { } ) 。
如果调用这个方法时 创建 一个新 属性 时,不 指定特性 ,则除 [[value]]] 外的特性的默认值都为 false

访问器属性
访问器属性不包含数据值,包含 [[get]] 和 [[set]] 函数,用来 定义 如何 读取 写入 数据,这2个函数是 可选的

访问器属性有4个特性,访问器属性的特性 必须通过 Object.defineProperty() 来定义。

*严格模式下,对没有设置set的属性写入,或者对没有设置get的属性读取,都会抛出错误。

<code><font size="4"><b>Object.defineProperties()</b></font></code> 方法用来对 一个对象 多个属性 同时进行定义,接收2个参数。
第1个参数是要添加和修改其属性的对象,第2个参数接收一个对象,即要修改的内容,其属性与第1个对象中的属性一一对应。

<code><font size="4"><b>Object.getOwnPropertyDescriptor()</b></font></code>方法用来读取一个对象 实例 的某一个属性的特性,返回一个 对象
参数分别为:属性所在的对象,要读取的属性。

新实例里有一个 constructor 属性指向构造函数, constructor 属性默认是 不可枚举 的。
当调用构造函数时不加 new ,则是当做一般函数使用,this指向该函数本身所在的作用域(一般是window)。

原型模式

<code><font size="4"><i>prototype.</i><b>isPrototypeOf</b>(<i>object</i>)</font></code>方法

<code><font size="4"><b>Object.getPrototypeOf</b>(<i>object</i>)</font></code>方法

<code><font size="4"><i>object.</i><b>hasOwnProperty</b>(<i>"property"</i>)</font></code>方法

<code><font size="4"><b>in</b></font></code>操作符

<code><font size="4"><b>Object.keys</b>(<i>object</i>)</font></code>方法

使用更简单的语法
使用一个包含所有属性和方法的对象字面量来 重写 整个原型对象。

原型对象存在的问题
原型共享可能会导致修改一个对象实例而导致另一个对象实例也被修改

相似回答