Lang:简体中文

面向对象的面试题js

日期:2025-09-08 / 来源:面试宝典

深入剖析常见面向对象js面试考点

在javascript面试中,面向对象的相关问题是考察重点。下面就来详细分析一些常见的面试题。

原型与原型链

原型和原型链是javascript面向对象的核心概念。面试中常问的问题是:如何理解javascript的原型链?简单来说,每个对象都有一个内部属性[[prototype]],它指向该对象的原型对象。当访问一个对象的属性或方法时,javascript首先会在对象本身查找,如果找不到,就会沿着原型链向上查找,直到找到该属性或方法或者到达原型链的顶端(object.prototype)。

例如:

function person(name) {

this.name = name;

}

person.prototype.sayname = function() {

console.log(this.name);

};

let person = new person('john');

person.sayname(); // 输出 'john'

这里,person对象本身没有sayname方法,但它的原型对象(person.prototype)有,所以可以通过原型链调用该方法。

继承的实现方式

继承是面向对象编程的重要特性。在javascript中,有多种实现继承的方式。常见的面试问题是:请列举几种javascript实现继承的方式。

1. 原型链继承:通过让子类的原型指向父类的实例来实现继承。但这种方式存在一些问题,比如子类实例会共享父类实例的属性。

2. 构造函数继承:在子类构造函数中调用父类构造函数。这种方式可以避免原型链继承的问题,但无法继承父类原型上的方法。

3. 组合继承:结合了原型链继承和构造函数继承的优点。

4. 寄生组合继承:是组合继承的优化版本,避免了多次调用父类构造函数。

类与实例

es6引入了类的概念,使得javascript的面向对象编程更加直观。面试中可能会问:如何创建一个类和实例?

例如:

class animal {

constructor(name) {

this.name = name;

}

sayname() {

console.log(this.name);

}

}

let dog = new animal('dog');

dog.sayname(); // 输出 'dog'

这里,animal是一个类,dog是animal类的一个实例。

封装与访问控制

封装是将数据和操作数据的方法捆绑在一起,并对外部隐藏实现细节。面试中可能会问:如何在javascript中实现封装?

在javascript中,可以使用闭包来实现封装。例如:

function createperson() {

let name = 'john';

return {

getname: function() {

return name;

}

};

}

let person = createperson();

console.log(person.getname()); // 输出 'john'

这里,name变量被封装在createperson函数内部,外部无法直接访问,只能通过getname方法获取。

多态

多态是指同一个方法可以根据对象的不同类型而表现出不同的行为。面试中可能会问:请举例说明javascript中的多态。

例如:

function makesound(animal) {

animal.sound();

}

class dog {

sound() {

console.log('woof!');

}

}

class cat {

sound() {

console.log('meow!');

}

}

let dog = new dog();

let cat = new cat();

makesound(dog); // 输出 'woof!'

makesound(cat); // 输出 'meow!'

这里,makesound函数根据传入的不同对象(dog或cat)调用不同的sound方法,体现了多态性。

以下为推荐内容

微信二维码