JavaScript 基础教程

JS 教程 JS 简介 JS 如何使用 JS 输出 JS 语法 JS 语句 JS 注释 JS 变量 JS 运算符 JS If 条件语句 JS 循环 JS 字符串 JS 数字 JS 函数 JS 对象 JS 日期 JS 数组 JS 类型化数组 JS 集合 JS Map 映射 JS Math JS 正则表达式 JS 数据类型 JS 错误 JS 事件 JS 编程 JS 关键字参考 JS 保留关键字参考 JS 运算符参考 JS 运算符优先级 JS UTF-8 字符 JS UTF-8 符号 JS UTF-8 表情符号 JS 版本

JS 高级教程

JS 函数 JS 对象 JS 类 JS 迭代 JS Promises JS 模块 JS HTML DOM JS Windows JS Web API JS AJAX JS JSON JS jQuery JS 图形

JS 实例

JS 实例 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS Browser JS 编辑器 JS 练习 JS 测验

JS 参考手册

JS 参考 HTML DOM 对象


JavaScript ES5 对象方法

ECMAScript 5 (2009) 向 JavaScript 添加了许多新的对象方法。

ES5 新对象方法

// 添加或更改对象属性
Object.defineProperty(object, property, descriptor)

// 添加或更改许多对象属性
Object.defineProperties(object, descriptors)

// 访问属性
Object.getOwnPropertyDescriptor(object, property)

// 以数组的形式返回所有属性
Object.getOwnPropertyNames(object)

// 以数组的形式返回可枚举属性
Object.keys(object)

// 访问原型
Object.getPrototypeOf(object)

// 防止向对象添加属性
Object.preventExtensions(object)
// 如果属性可以添加到对象,则返回 true
Object.isExtensible(object)

// 防止更改对象属性(不是值)
Object.seal(object)
// 如果对象是密封的,则返回 true
Object.isSealed(object)

// 防止对对象进行任何更改
Object.freeze(object)
// 如果对象被冻结,则返回 true
Object.isFrozen(object)

更改属性值

语法

Object.defineProperty(object, property, {value : value})

此例更改属性值:

实例

var person = {
  firstName: "John",
  lastName : "Doe",
  language : "EN"
};

// 更改属性
Object.defineProperty(person, "language", {value : "NO"});
亲自试一试 »

更改元数据

ES5 允许更改以下属性元数据:

writable : true      // 属性值可以更改
enumerable : true    // 可枚举属性
configurable : true  // 属性可以重新配置
writable : false     // 属性值不能更改
enumerable : false   // 属性不能枚举
configurable : false // 属性不能重新配置

ES5 允许更改 getter 和 setter:

// 定义一个 getter
get: function() { return language }
// 定义一个setter
set: function(value) { language = value }

此例设置 language 为只读:

Object.defineProperty(person, "language", {writable:false});

这个例子使 language 不可枚举:

Object.defineProperty(person, "language", {enumerable:false});

列出所有属性

这个例子列出了一个对象的所有属性:

实例

var person = {
  firstName: "John",
  lastName : "Doe",
  language : "EN"
};

Object.defineProperty(person, "language", {enumerable:false});
Object.getOwnPropertyNames(person);  // 返回一个属性数组
亲自试一试 »

列出可枚举的属性

此例仅列出对象的可枚举属性:

实例

var person = {
  firstName: "John",
  lastName : "Doe",
  language : "EN"
};

Object.defineProperty(person, "language", {enumerable:false});
Object.keys(person);  // 返回可枚举属性的数组
亲自试一试 »

添加属性

此例向对象添加新属性:

实例

// 创建一个对象:
var person = {
  firstName: "John",
  lastName : "Doe",
  language : "EN"
};

// 添加属性
Object.defineProperty(person, "year", {value:"2008"});
亲自试一试 »

添加 Getter 和 Setter

Object.defineProperty() 方法也可以用来添加 Getter 和 Setter:

实例

// 创建一个对象
var person = {firstName:"John", lastName:"Doe"};

// 定义一个 getter
Object.defineProperty(person, "fullName", {
  get : function () {return this.firstName + " " + this.lastName;}
});
亲自试一试 »

一个计数器实例

实例

// 定义对象
var obj = {counter:0};

// 定义 setters
Object.defineProperty(obj, "reset", {
  get : function () {this.counter = 0;}
});
Object.defineProperty(obj, "increment", {
  get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
  get : function () {this.counter--;}
});
Object.defineProperty(obj, "add", {
  set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
  set : function (i) {this.counter -= i;}
});

// Play with the counter:
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;
亲自试一试 »


关于我们 | 隐私条款 | 学习路线
返回顶部