Q:get 请求传参长度的误区
A:
误区:我闪经常说 get 请求参数的大小存在限制,而 post 请求的参数大小是无限制的。实际上 HTTP 协议从未规定 GET/POST 的请求长度限制是多少,对 get 请求参数的限制是来源与浏览器或 WEB 服务器,浏览器或 WEB 服务器限制了 URL的长度。
- HTTP 协议没有规定 GET 和 POST 的长度限制
- GET 的最大长度显示是因为 浏览器 和 WEB服务器限制了 URL 的长度
-
Q:get 和 post 请求在缓存方面的区别
A:
get 请求类似于查找的过程,用户获取数据,可以不用每次都与数据库连接,所以可以使用缓存
- post 不同, post 做的一般是修改和删除的工作,所以必须与数据库交互,不能使用缓存
Q:说一下闭包
A: 一句话概括:闭包就是能够读取其他函数内部变量的函数,或者子函数在外调用,子函数所在的父函数的作用域不会被释放
Q:说一下类的创建和继承
A:
- 类的创建(ES5):
- 定义一个 function,这个 function 为类的构造函数。
- 在这个构造函数的 prototype 增加其方法
- 使用 new 操作符来声明这个构造函数,其 this 会指向创造出来的实例对象。
- ES5 常用的
类的继承:
- 原型链继承
Child.prototype = new Father();
- 会存在引用值共享的问题
借用构造函数
function Child() {
Father.call(this);
}
组合继承,结合原型链继承与借用构造函数继承,又称为伪经典继承
function Child() {
Father.call(this);
}
Child.prototype = new Base();
- 会存在构造函数执行两次
- 寄生组合继承,又称为经典继承
function Child(){
Father.call(this);
}
Child.prototype = Object.create(Father.prototype);
Child.constructor = Father;
- 使用 Object.create 方法绕过 Father 的实例操作,只拿其构造函数的方法
Child.prototype 只要重写,会导致在重写前在 Child.prototype 方法没有。所以只能在继承后再定义 Child 的在 prototype 的方法
- 原型链继承
ES6 class ```javascript class Father{ constructor() {
this.props = [];
} method() { } }
class Child extends Father{ constructor() { super(); } method() {
} static staticMethod() {
} } ```