返回
技术博客文章:前端笔试题汇总及解析
见解分享
2024-02-14 01:28:06
- 评价一下三种方法实现继承的的优缺点,并改进。
三种方法实现继承的优缺点:
-
原型链继承:
- 优点:
- 实现简单,易于理解。
- 性能优异,因为它是直接在原型链上查找属性和方法的。
- 可以在运行时动态地添加或修改属性和方法。
- 缺点:
- 无法访问父类构造函数。
- 无法实现多重继承。
- 无法继承父类的私有属性和方法。
- 优点:
-
构造函数继承:
- 优点:
- 可以访问父类构造函数。
- 可以实现多重继承。
- 可以继承父类的私有属性和方法。
- 缺点:
- 实现复杂,容易出错。
- 性能较差,因为每次调用子类构造函数时,都需要先调用父类构造函数。
- 无法动态地添加或修改属性和方法。
- 优点:
-
组合继承:
- 优点:
- 结合了原型链继承和构造函数继承的优点。
- 可以访问父类构造函数。
- 可以实现多重继承。
- 可以继承父类的私有属性和方法。
- 可以动态地添加或修改属性和方法。
- 缺点:
- 实现复杂,容易出错。
- 性能较差,因为每次调用子类构造函数时,都需要先调用父类构造函数。
- 优点:
改进方法:
- 可以通过使用 ES6 的 class 来改进继承的实现。
- class 继承是基于原型链继承的,但是它提供了更好的语法糖,使继承更易于理解和使用。
- class 继承还可以实现多重继承,但是需要使用特殊的语法。
14. focus/blur 与 focusin/focusout 的区别与联系。
区别:
- focus 和 blur 事件发生在元素获得或失去焦点时。
- focusin 和 focusout 事件发生在元素及其子元素获得或失去焦点时。
联系:
- focusin 事件等同于 focus 事件,当元素或其子元素获得焦点时触发。
- focusout 事件等同于 blur 事件,当元素或其子元素失去焦点时触发。
举个例子:
<div id="parent">
<input type="text" id="child">
</div>
document.getElementById("parent").addEventListener("focusin", function() {
console.log("The parent element or one of its children has gained focus.");
});
document.getElementById("parent").addEventListener("focusout", function() {
console.log("The parent element or one of its children has lost focus.");
});
document.getElementById("child").addEventListener("focus", function() {
console.log("The child element has gained focus.");
});
document.getElementById("child").addEventListener("blur", function() {
console.log("The child element has lost focus.");
});
当用户在子元素上单击时,将会触发以下事件:
- focusin 事件在父元素上触发。
- focus 事件在子元素上触发。
当用户在子元素上单击然后离开时,将会触发以下事件:
- blur 事件在子元素上触发。
- focusout 事件在父元素上触发。
19. HTTP 状态码 101、200、301、302、304的具体含义。
101:Switching Protocols
表示服务器已经收到请求,并准备切换到由 Upgrade 头部字段指定的新协议。
200:OK
表示请求已成功,并且服务器已返回请求的数据。
301:Moved Permanently
表示请求的资源已被永久移动到另一个位置。服务器返回此状态码时,还会在 Location 头部字段中指定新的位置。
302:Found
表示请求的资源已被临时移动到另一个位置。服务器返回此状态码时,还会在 Location 头部字段中指定新的位置。
304:Not Modified
表示请求的资源未被修改,因此服务器无需返回任何数据。