面试题答案
一键面试- 性能问题:
- 内存浪费:每次通过构造函数创建新对象时,都会为每个对象重新创建方法。例如:
function Person(name) {
this.name = name;
this.sayHello = function() {
console.log('Hello, I am'+ this.name);
};
}
let person1 = new Person('Alice');
let person2 = new Person('Bob');
这里person1
和person2
都有自己独立的sayHello
方法,即使它们的功能完全一样,造成了内存的浪费。
- 构造函数执行时间长:如果构造函数中包含复杂的计算或大量的初始化操作,每次创建新对象时都会重复执行这些操作,导致性能下降。比如:
function ComplexObject() {
// 模拟复杂计算
let result = 1;
for (let i = 1; i <= 1000000; i++) {
result *= i;
}
this.value = result;
}
let obj1 = new ComplexObject();
let obj2 = new ComplexObject();
这里每次创建ComplexObject
实例时,都会重复进行1到1000000的连乘计算。
- 针对内存浪费问题的优化思路及代码示例: 优化思路是将共享的方法定义在构造函数的原型上,这样所有实例可以共享这些方法,而不是每个实例都有自己的副本。 代码示例:
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log('Hello, I am'+ this.name);
};
let person1 = new Person('Alice');
let person2 = new Person('Bob');
这样person1
和person2
共享sayHello
方法,节省了内存。