Js对象的内部属性
数据属性和访问器属性
数据属性 | 访问器属性 | |
---|---|---|
共同特性 | [[enumerable]] | |
[[configurable]] | ||
特有特性 | [[writable]] | [[get]] |
[[value]] | [[set]] | |
设置单个属性方法 | Object.defineProperty(obj, prop, descriptor) | |
设置多个属性方法 | Object.defineProperties(obj, props) | |
读取单个属性描述符 | Object.getOwnPropertyDescriptor(obj, prop) | |
读取对象所有属性描述符 | Object.getOwnPropertyDescriptors(obj) | |
备注 | obj: 需要被操作的目标对象; prop: 目标对象需要定义(读取)或修改的属性的名称; descriptor: 将被定义或修改的属性的描述符; props: 该对象的一个或多个键值对定义了将要为对象添加或修改的属性的具体配置; |
特性详情
[[Configurable]]:
表示能否通过delete删除属性从而重新定义属性,(设置为false,表示不能从对象中删除属性(在严格模式下调用delete会报错)),能否修改属性的特性,能否把数据属性修改为访问器属性(或相反),从true修改为false是单向的,即一旦把把属性定义为不可配置的,就不能再把它变回可配置了(此时只能单向修改writable从true到false)。
[[Enumerable]]: 表示能否通过for-in循环返回属性
[[Writable]]: 表示能否修改属性的值
[[Value]] : 包含这个属性的数据值
[[Get]]: 读取属性时调用的函数,默认值为undefined
[[Set]]: 写入属性时调用的函数,默认值为undefined
对象常用的内部属性
[[Prototype]]——对象的原型(将在下面详细介绍)
[[Class]]——字符串对象的一种表示(例如,Object Array ,Function Object,Function等);用来区分对象
可以用Object.prototype.toString()方法可以间接得到内部属性[[Class]]的值,该方法应该返回下列字符串: "[object " + [[Class]] + "]" 。 比如
var getClass = Object.prototype.toString;
getClass.call({}); // [object Object]
getClass.call([]); // [object Array]
getClass.call(new Number(1)); // [object Number]
[[Get]]——获得属性值的方法
[[Put]]——设置属性值的方法
[[CanPut]]——检查属性是否可写
[[HasProperty]]——检查对象是否已经拥有该属性
[[Delete]]——从对象删除该属性
[[DefaultValue]]返回对象对于的原始值(调用valueOf方法,某些对象可能会抛出TypeError异常)。
电脑刺绣绣花厂 http://www.szhdn.com 广州品牌设计公司https://www.houdianzi.com
prototype 属性可以为对象添加方法;
拥有 construct 属性的对象可以通过 new 操作符来调用,此时该对象可以被理解为类;
拥有call 属性的对象可以通过函数名称来调用,JavaScript中一切皆对象,所有的函数(对象)都拥有此属性。
2.对象的创建、访问和释放
(1)创建对象
在JavaScript中,使用 new 关键字调用构造函数来创建对象。
var 对象名 = new 构造函数();
(2)对象的属性
对象的属性都通过 “.”运算符访问。
如果访问值是 null对象的属性,将出现空引用错误。与普通变量函数相同,对象的属性可以动态生成。将某个属性值设置为null表示删除该属性。
在函数内部的对象,函数执行完毕后将自动释放所占用的资源;
在函数外部定义的对象,将其值设置为null后,垃圾收集器将释放其占用的资源。
3.常用内置对象
常用的内置对象包括Global,Object,Function,Array,String,Date,RegExp,Math,Error等等。
(1)Global对象: js中顶级对象,一切声明的变量和函数都是它的属性。
特性:
1. 没有 construct 属性,所以无法使用 new 操作符构造。
2. 没有 call 属性,所以无法调用
3. 只是表示全局对象的概念,依据宿主不同而不同,例如,在浏览器中,window对象即为Global对象。
(2)Object对象:所有对象的基础,其他所有对象都从Object 对象扩展而来,这一切都通过原型实现。原型是对象的一个属性,即 prototype。prototype 本身是一个对象,每个对象都具有此属性。js中每个对象本身都不包含具体的属性(但可以动态添加),而是通过原型进行属性的共享。当获取一个对象的属性时,系统首先检测对象是否直接包含该属性,如果不包含则从原型属性中查找;如果扔为找到则返回 undefined。
所有对象都派生自 Object,所以使用原型为 Object对象扩展属性时,所有对象都具有该属性。
(3)Function 对象: 函数也是对象(js中一切皆对象),所以当使用function关键字定义函数时,实际上是在系统内部创建了一个Function对象。
具体使用参见:JavaScript 基础回顾——函数
(4)Error对象: 内置的Error对象可以在发生错误时作为参数传递给catch子句,也可以使用 new 关键字构造自定义的Error对象。