Nodejs相关:看到一篇文章 Understanding JavaScript OOP

Nodejs相关:看到一篇文章 Understanding JavaScript OOP

可惜是英文的… 觉得用法好高端啊, 以前学 JS 比较乱, 都没接触到这层, Orz http://killdream.github.com/blog/2011/10/understanding-javascript-oop/

Object.defineProperty(mikhail, 'name', { value:        'Mikhail'
                                       , writable:     true
                                       , configurable: true
                                       , enumerable:   true })

Object.defineProperty(mikhail, 'age', { value:        19
                                      , writable:     true
                                      , configurable: true
                                      , enumerable:   true })

Object.defineProperty(mikhail, 'gender', { value:        'Male'
                                         , writable:     true
                                         , configurable: true
                                         , enumerable:   true })
8 回复

好的,让我们来探讨一下Node.js中的JavaScript面向对象编程(OOP)的概念。这篇文章引用了一个例子,展示了如何使用Object.defineProperty来定义对象属性。这个方法可以让你更精细地控制属性的行为,例如是否可写、是否可配置等。

示例代码

假设我们有一个类 Person,我们可以使用ES6的类语法来实现一个简单的面向对象模型,并使用Object.defineProperty来定义一些属性:

class Person {
    constructor(name, age, gender) {
        Object.defineProperty(this, 'name', {
            value: name,
            writable: true,
            configurable: true,
            enumerable: true
        });

        Object.defineProperty(this, 'age', {
            value: age,
            writable: true,
            configurable: true,
            enumerable: true
        });

        Object.defineProperty(this, 'gender', {
            value: gender,
            writable: true,
            configurable: true,
            enumerable: true
        });
    }

    // 定义一个方法
    introduce() {
        console.log(`Hello, my name is ${this.name}, I am ${this.age} years old and I am a ${this.gender}.`);
    }
}

// 创建一个Person实例
const mikhail = new Person('Mikhail', 19, 'Male');

// 输出信息
mikhail.introduce();

解释

  1. 构造函数:我们在构造函数中使用Object.defineProperty来定义对象的属性。这样做的好处是可以精确控制这些属性的行为。
  2. 属性定义:通过Object.defineProperty,我们可以设置属性的value(值)、writable(是否可修改)、configurable(是否可重新定义或删除)和enumerable(是否可枚举)。
  3. 方法定义:除了属性之外,我们还可以在类中定义方法,比如这里的 introduce() 方法,用于输出个人信息。

通过这种方式,我们可以更好地理解JavaScript中的面向对象编程,并且能够更加灵活地控制对象的属性和行为。希望这个示例能帮助你更好地理解和应用JavaScript中的面向对象编程。


这是EC-5的用法吧,,低端浏览器不支持啊。。

这个计子在沪js大会上说过

Object.defineProperty(Array.prototype, 'lastItem', {
    'get':function () {
        return this[this.length - 1];
    }
});

这个是我在node里扩展的一个东西.

这是最基本的知识吧……

虽然这么说… 我自学 JS 的, 这个真的每个学完 JS 的人都清晰的么, 我说链接里边的那些…

反射不慎太长了… 没去过上海… "计子"原来是缩写是吧…

理解JavaScript面向对象编程(OOP)确实非常重要,特别是在使用Node.js时。这篇文章中的代码片段展示了如何使用Object.defineProperty来定义对象属性。这种方法提供了更多的控制权,比如是否可写、可配置或可枚举。

示例代码

以下是一个简单的例子,展示如何使用构造函数和原型来创建类,并使用Object.defineProperty来定义对象属性:

// 定义一个Person构造函数
function Person(name, age, gender) {
    // 使用构造函数内部定义不可枚举属性
    Object.defineProperty(this, 'name', { 
        value: name,
        writable: false,  // 不可写
        configurable: false,  // 不可配置
        enumerable: false  // 不可枚举
    });

    this.age = age;
    this.gender = gender;
}

// 在原型上定义方法
Person.prototype.greet = function() {
    console.log(`Hello, my name is ${this.name}, I am ${this.age} years old.`);
};

// 创建一个Person实例
const mikhail = new Person('Mikhail', 19, 'Male');

console.log(mikhail);
mikhail.greet();

解释

  • 构造函数 (Person): 这是一个普通的JavaScript函数,用来初始化对象。
  • 不可枚举属性 (name): 使用Object.defineProperty定义了name属性为不可枚举、不可写、不可配置。
  • 可配置属性 (age, gender): 直接赋值给this,这些属性默认是可写的、可配置的和可枚举的。
  • 原型方法 (greet): 将方法定义在原型上,这样所有实例都可以共享该方法。

通过这种方式,你可以更好地控制对象的属性和行为,这是JavaScript面向对象编程的一部分。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!