MST

星途 面试题库

面试题:JavaScript 中 prototype 特性的基本理解

请解释 JavaScript 中 prototype 的作用是什么,以及如何通过 prototype 实现对象间属性和方法的共享?
10.3万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

prototype 的作用

  1. 实现继承和属性共享:在JavaScript中,每个函数都有一个 prototype 属性,这个属性是一个对象,它包含了可以被该函数创建的所有实例共享的属性和方法。当使用构造函数创建对象实例时,实例对象会通过 [[Prototype]] (在现代JavaScript中可以通过 __proto__ 访问,虽然 __proto__ 已被标记为非标准但广泛支持)链接到构造函数的 prototype 对象。这使得所有实例可以共享 prototype 对象上的属性和方法,而不需要在每个实例中重复创建,节省了内存空间。
  2. 动态添加属性和方法:可以在运行时向 prototype 对象添加新的属性和方法,这些新增的内容会立即对所有基于该构造函数创建的实例可见。

通过 prototype 实现对象间属性和方法共享的方式

  1. 构造函数方式
function Person(name) {
    this.name = name;
}
Person.prototype.sayHello = function() {
    console.log(`Hello, I'm ${this.name}`);
};
let person1 = new Person('Alice');
let person2 = new Person('Bob');
person1.sayHello(); // 输出: Hello, I'm Alice
person2.sayHello(); // 输出: Hello, I'm Bob

在上述代码中,Person 是一个构造函数,sayHello 方法定义在 Person.prototype 上。通过 new Person() 创建的 person1person2 实例都可以访问 sayHello 方法,实现了方法的共享。 2. Object.create() 方式

let animalPrototype = {
    speak: function() {
        console.log('I am an animal');
    }
};
let dog = Object.create(animalPrototype);
dog.speak(); // 输出: I am an animal

这里通过 Object.create(animalPrototype) 创建了 dog 对象,dog 对象继承自 animalPrototype,从而共享了 speak 方法。