[转] Revisiting JavaScript Objects with Nodejs

[转] Revisiting JavaScript Objects with Nodejs

LakTEK: 29 December 2012 http://www.laktek.com/2012/12/29/revisiting-javascript-objects/ 讲 ES5 的, 这么复杂真不像 JS

4 回复

[转] Revisiting JavaScript Objects with Node.js

JavaScript 对象是这门语言的核心概念之一。尽管它们简单易用,但随着 ECMAScript 5 (ES5) 的引入,对象的创建和管理变得更加复杂。本文将探讨如何利用 ES5 中的新特性来更有效地操作 JavaScript 对象,并通过 Node.js 示例展示这些技术的实际应用。

1. 创建对象

在 ES5 之前,我们通常使用构造函数或对象字面量来创建对象。例如:

// 使用构造函数
function Person(name, age) {
    this.name = name;
    this.age = age;
}

const person1 = new Person('Alice', 30);

// 使用对象字面量
const person2 = {
    name: 'Bob',
    age: 25
};

ES5 引入了 Object.create() 方法,可以让我们更灵活地创建对象并继承原型链。例如:

const personPrototype = {
    sayHello: function() {
        console.log(`Hello, my name is ${this.name}`);
    }
};

const person1 = Object.create(personPrototype);
person1.name = 'Alice';
person1.age = 30;

person1.sayHello(); // 输出 "Hello, my name is Alice"

2. 属性描述符

ES5 引入了属性描述符(Property Descriptors),允许我们更细粒度地控制对象属性的行为。例如,我们可以定义一个只读属性:

const obj = {};

Object.defineProperty(obj, 'readOnlyProp', {
    value: 'This is a read-only property',
    writable: false,
    enumerable: true,
    configurable: false
});

console.log(obj.readOnlyProp); // 输出 "This is a read-only property"

// 尝试修改只读属性会抛出错误
obj.readOnlyProp = 'New value'; // 抛出 TypeError

3. 属性枚举

Object.keys(), Object.values(), 和 Object.entries() 方法使得遍历对象属性变得更加方便。例如:

const obj = {
    name: 'Alice',
    age: 30
};

console.log(Object.keys(obj)); // 输出 ["name", "age"]
console.log(Object.values(obj)); // 输出 ["Alice", 30]
console.log(Object.entries(obj)); // 输出 [["name", "Alice"], ["age", 30]]

总结

虽然 ES5 引入了一些新的对象操作方法,但这些方法实际上使我们的代码更加健壮和灵活。通过合理使用这些新特性,我们可以更好地管理和扩展 JavaScript 对象。希望这篇文章能帮助你更好地理解并应用这些技术。


本文中的示例代码可以在 Node.js 环境中运行,确保你的 Node.js 版本支持 ES5 特性。


像c#和java了

ES5 里面的Object.create()才是 JS 应该有的,还有setget也很方便。

这篇文章主要讨论了ES5(ECMAScript 5)中JavaScript对象的新特性和改进。ES5引入了一些新的方法来操作和处理对象,使得开发者能够更方便地管理和操作数据。以下是一些关键点的简要介绍:

1. Object.create()

Object.create() 方法用于创建一个新对象,并指定该对象的原型。

// 创建一个对象并设置其原型为另一个对象
const parent = {
  name: 'Parent',
  greet: function() {
    console.log(`Hello, I'm ${this.name}`);
  }
};

const child = Object.create(parent);
child.name = 'Child';
child.greet(); // 输出 "Hello, I'm Child"

2. Object.keys()

Object.keys() 方法返回一个由给定对象的所有可枚举属性的键名组成的数组。

const obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj)); // 输出 ["a", "b", "c"]

3. Object.getOwnPropertyNames()

Object.getOwnPropertyNames() 方法返回一个由指定对象的所有自身属性的键名(包括不可枚举属性)组成的数组。

const obj = Object.defineProperties({}, {
  a: { value: 1, enumerable: false },
  b: { value: 2, enumerable: true }
});

console.log(Object.getOwnPropertyNames(obj)); // 输出 ["a", "b"]

4. Object.defineProperty()

Object.defineProperty() 方法允许精确添加或修改对象的属性。

const obj = {};
Object.defineProperty(obj, 'name', {
  value: 'Custom Name',
  writable: true,
  enumerable: true,
  configurable: true
});
console.log(obj.name); // 输出 "Custom Name"

这些新特性让JavaScript对象的操作更加灵活和强大,特别是在处理复杂的数据结构时。希望这些示例能帮助你更好地理解和使用ES5中的JavaScript对象功能。

回到顶部