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