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 })
好的,让我们来探讨一下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();
解释
- 构造函数:我们在构造函数中使用
Object.defineProperty
来定义对象的属性。这样做的好处是可以精确控制这些属性的行为。 - 属性定义:通过
Object.defineProperty
,我们可以设置属性的value
(值)、writable
(是否可修改)、configurable
(是否可重新定义或删除)和enumerable
(是否可枚举)。 - 方法定义:除了属性之外,我们还可以在类中定义方法,比如这里的
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面向对象编程的一部分。