- 普通对象:
- 直接使用字面量创建的对象,可以在对象内部直接定义属性和方法。
- 适用于创建单例对象、工具类等。
const obj = {
name: "John",
sayHello() {
console.log(`Hello, ${this.name}!`);
},
};
obj.sayHello();
- 构造函数:
- 创建多个相似对象的方式,通过使用 new 关键字和构造函数来实例化对象。
- 使用 this 关键字在函数内部定义属性和方法。属性和方法是每个实例对象独立拥有的。
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function () {
console.log(
`Hello, my name is ${this.name} and I am ${this.age} years old`
);
};
}
const person = new Person("John", 30);
person.sayHello();
- 原型:
- 每个 JavaScript 对象都具有的一个隐藏属性,用于实现属性和方法的共享和继承。
- 适用于共享属性和方法、实现对象的继承。
function Person(name) {
this.name = name;
}
Person.prototype = {
sayHello() {
console.log(`Hello, ${this.name}!`);
},
};
const person = new Person("John");
person.sayHello();
| 特征 | 普通对象 | 构造函数 | 原型 |
|---|
| 创建方式 | 字面量创建对象 | 使用 new 关键字实例化对象 | 使用构造函数和 new 关键字创建对象 |
| 实例化对象 | 直接创建对象,不需要使用 new 关键字 | 使用 new 关键字创建对象 | 使用 new 关键字创建对象 |
| 内存占用 | 每个实例对象都拥有自己的方法和属性 | 方法和属性共享于所有实例对象 | 方法和属性共享于所有实例对象 |
| 方法定义 | 直接在对象内部定义方法 | 在构造函数内部使用 this 定义方法 | 在原型对象上定义方法 |
| 属性定义 | 直接在对象内部定义属性 | 在构造函数内部使用 this 定义属性 | 在构造函数的原型对象上定义属性 |
| 继承性 | 不支持继承 | 支持继承 | 支持继承 |
| 典型应用场景 | 单例对象、工具类等 | 创建多个相似对象 | 创建多个相似对象 |