面试题答案
一键面试方式一:在构造函数内部定义方法
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
方法内部不小心修改了原型对象上的其他属性,可能会影响到所有实例。 - 方法内部不能直接访问构造函数的私有变量(除非通过闭包等手段)。