MST

星途 面试题库

面试题:JavaScript中为已有类添加方法的常规优化方式

假设我们有一个已有的类`Person`,如下:`function Person(name) { this.name = name; }`,请用至少两种优化方式为`Person`类添加一个`sayHello`方法,简要说明每种方式的优缺点。
25.5万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

方式一:在构造函数内部定义方法

function Person(name) {
    this.name = name;
    this.sayHello = function() {
        console.log(`Hello, I'm ${this.name}`);
    };
}

优点

  • 每个实例的sayHello方法可以访问实例的私有变量,例如this.name
  • 不同实例的sayHello方法是相互独立的,在方法内部修改实例属性不会影响其他实例。

缺点

  • 每个实例都会创建一个新的sayHello函数实例,会占用更多内存空间。

方式二:在原型上定义方法

function Person(name) {
    this.name = name;
}
Person.prototype.sayHello = function() {
    console.log(`Hello, I'm ${this.name}`);
};

优点

  • 所有实例共享Person.prototype上的sayHello方法,节省内存空间。

缺点

  • 如果在sayHello方法内部不小心修改了原型对象上的其他属性,可能会影响到所有实例。
  • 方法内部不能直接访问构造函数的私有变量(除非通过闭包等手段)。