普通对象、构造函数和原型之间的区别

178 阅读1分钟
  • 普通对象:
    • 直接使用字面量创建的对象,可以在对象内部直接定义属性和方法。
    • 适用于创建单例对象、工具类等。
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(); // Output: "Hello, my name is John and I am 30 years old"
  • 原型:
    • 每个 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 定义属性在构造函数的原型对象上定义属性
继承性不支持继承支持继承支持继承
典型应用场景单例对象、工具类等创建多个相似对象创建多个相似对象