ECMAScript5 Object对象和属性
对象和属性:
属性一共分成三类,分别是命名数据属性、命名访问器属性和内部属性,前两类属性可以在代码中直接使用,而后面一种属性是规范使用的内部表示。
命名属性一般有:
Value:表示该属性的值
Writable:表示该属性的值是否为只读的
Enumerable: 表示该属性是否可以被枚举,可以被枚举的属性可以通过 for-in 循环来获取到
Configurable:表示该属性是否可以被配置,为true则表示 该属性可以被删除、可以被转换为访问器属性。
命名访问器属性:该类属性没有Value和Writable特性,属性获取和设置则通过get和set特性(函数)来实现。
内部属性:作用是定义 ECMAScript 中的对象在不同情况下的行为,常用的内部属性有:
Prototype属性:每个对象都有内部属性Prototype,用来引用另外一个对象。
Class属性:用来声明对象的类别,通过 Object.prototype.toString 函数可以获取到Class属性的值,当需要判断一个对象是否为 数组时,可以使用代码 Object.prototype.toString.apply(obj) === '[object Array]'。
Object 对象是 ECMAScript 中非常重要的一个对象。Object 对象本身是一个函数,所以typeof Object值是 function
Object 函数既可以直接调用,也可以作为构造函数来创建新的对象: Object() 的作用相当于 new Object(),所以Object("Hello")和new Object("Hello")调用结果是相同的。
Object属性有如下几种:
Object.prototype:这个属性可以获取 ECMAScript 中内置的 Object 原型对象,并访问其中的属性。
Object.getPrototypeOf:这个函数可以获取 Object 类型对象的内部属性 [[Prototype]] 的值。
Object.getOwnPropertyDescriptor:这个函数用来获取 Object 类型对象自身所拥有的属性的描述信息。描述信息是一个 Object 类型的对象,其中包含了属性的特性值。
例如:
Object.getOwnPropertyDescriptor({val:1}, 'val')的执行结果是{"configurable":true,"enumerable":true,"value":1,"writable":true}。
Object.getOwnPropertyNames:该函数用来获取一个包含 Object 类型对象自身所拥有的属性名称的数组。
例如:
Object.getOwnPropertyNames({a:1, b:2});的执行结果是["a", "b"]。
Object.defineProperty:该函数用来在 Object类型对象中创建一个新的属性。在调用时除了属性的名称之外,还需要提供属性的特性值。如果该名称的属性在对象中已经存在,则更新已有的属性。
例如:
var obj = {};
Object.defineProperty(obj, 'val', {}); // 创建一个新属性,特性为默认值,且新属性是可以被枚举的
obj.val = 1;
Object.defineProperty(obj, 'CONSTANT', {value : 32, writable : false}); // 创建一个只读属性
obj.CONSTANT = 16; // 对属性的修改是无效的,但是不会抛出错误
Object.defineProperties:该函数的作用类似于 Object.defineProperty,只不过该函数支持同时定义多个属性。
例如:
Object.defineProperties(obj, {a : {}, b : {}});定义两个新的属性 a 和 b。
Object.keys:调用该函数可以得到一个包含 Object 类型对象中所有可被枚举的属性的名称的数组。这个数组中包含的属性与使用 for-in 循环所能访问到的属性是相同的。
Object.create:该函数用来创建一个新的对象。新创建对象的内部属性Prototype的值由调用时的参数指定。在调用时还可以传入一个包含要定义的属性的对象。这个参数对象会被传递给 Object.defineProperties 函数来在新创建的对象中定义属性。通过 Object.create 可以很容易地实现基于原型的继承;
例如:
var Parent = {
getName: function() {
return this.name;
}
}
var child = Object.create(Parent, {
name: { value: "Benjamin"},
url : { value: "http://www.zuojj.com"}
});
console.log(child.getName()); //Benjamin
Extensible的作用是否允许在对象中动态添加新的property。
Object.preventExtensions 和 Object.isExtensible:这两个函数用来设置和获取 Object 类型对象的内部属性 Extensible 的值。调用函数 Object.preventExtensions 之后会把内部属性 Extensible 的值设为 false。一旦设为 false 之后,就无法在代码中重新设置回 true。
Object.seal 和 Object.isSealed:调用 Object.seal 函数会把内部属性 Extensible 的值设为 false,同时把对象所拥有的每个属性的特性 Configurable的值也设为 false。
例如:
var obj = {val : 1};
obj.newVal = "Hello";
Object.seal(obj);
Object.defineProperty(obj, 'anotherVal', {}); // 抛出 TypeError 错误
Object.freeze 和 Object.isFrozen:Object.freeze 函数除了会执行 Object.seal 函数中所做的处理之外,还会把对象所拥有的命名数据属性的特性 Writable的值设为 false。
Object.preventExtensions、Object.seal 和 Object.freeze 函数可以用来保护对象,防止被第三方有意或无意的修改。
- ECMAScript5中的对象存取器属性:getter和setter
- Yii Object对象与属性相关的方法
- ECMAScript5 Object的新属性方法
- JavaScript创建一个object对象并操作对象属性的用法
- flex中Object对象的属性删除
- 对象转JSONArray,JSONObject[包括对象中日期格式化,属性过滤]
- struts2 if 标签的使用 已经使用迭代取出List中的Object对象中的属性
- as3中DisplayObject对象的rotation属性
- Object.keys()js 把对象按照属性名的字母顺序进行排列
- IOS 根据对象属性值过滤数组中的元素 Filter NSMutableArray with object property
- [Play with T]_[C# 类与属性操作] ObjectMap 方法 将TTfrom类的对象转换为TEntity对象
- 分享:c#和javascript函数的相互调用(ObjectForScripting 的类必须对 COM 可见。请确认该对象是公共的,或考虑向您的类添加 ComVisible 属性。)
- Atiitt 对象转换json 序列化规范 Java 循环引用的解决 设置序列化层次深度 去除不必的属性 太长不方便月度 jsonObject.remove("num1"); Prety fo
- JS面向对象定义多个属性--object.defineProperties()方法
- C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)
- ECMAScript5 Object的新属性方法
- JAVA 反射获得object对象对应的实体类的属性、及属性值
- [转]ECMAScript5 Object的新属性方法
- $.isEmptyObject():检查对象是否为空(不包含任何属性)。
- QML Object Attributes QML对象属性