前端知识点
2020-09-24 11:02:53 0 举报
AI智能生成
前端面试知识点
作者其他创作
大纲/内容
将类数组转换为数组的方法
Array.prototype.slice.call(arguments)
[].slice.call(arguments)
Array.from(arguments)
class | 静态属性、方法,私有属性、方法
静态方法
es6
class MyClass {
constructor() {}
static say() {}
}
constructor() {}
static say() {}
}
es5
function MyClass() {}
MyClass.say = function() {}
MyClass.say = function() {}
静态属性
let name=""
class MyClass {
static getName() {}
static setName() {}
}
class MyClass {
static getName() {}
static setName() {}
}
私有属性
WeakMap
const _name = new WeakMap()
class MyClass {
constructor({name, age}) {
_name.set(this, name)
}
say() {
console.log(_name.get(this))
}
}
class MyClass {
constructor({name, age}) {
_name.set(this, name)
}
say() {
console.log(_name.get(this))
}
}
Symbol
const _counter = Symbol('counter');
const _action = Symbol('action');
class Countdown {
constructor(counter, action) {
this[_counter] = counter;
this[_action] = action;
}
dec() {
if (this[_counter] < 1) return;
this[_counter]--;
if (this[_counter] === 0) {
this[_action]();
}
}
}
const _action = Symbol('action');
class Countdown {
constructor(counter, action) {
this[_counter] = counter;
this[_action] = action;
}
dec() {
if (this[_counter] < 1) return;
this[_counter]--;
if (this[_counter] === 0) {
this[_action]();
}
}
}
特征
1、class内部不同方法间可以使用,因此this要指向实例化对象(必须)
2、不能被外部访问,因此实例化对象$person.name既不能获得值,也不能设定值(必须)
3、不能被继承,因此extends后子类不具备该属性,但理论上可以重新手工添加(必须)
4、约定为前面有下划线的this._name形式(备选)
2、不能被外部访问,因此实例化对象$person.name既不能获得值,也不能设定值(必须)
3、不能被继承,因此extends后子类不具备该属性,但理论上可以重新手工添加(必须)
4、约定为前面有下划线的this._name形式(备选)
私有方法
WeakMap
var _say = new WeakMap()
class MyClass {
constructor({name, age}) {
this.name = name
_say.set(this, () => {
console.log(this.name)
})
}
}
class MyClass {
constructor({name, age}) {
this.name = name
_say.set(this, () => {
console.log(this.name)
})
}
}
通过模块隔离:在class外部创建函数,这些函数只有在同一个文档中可见,因此对外部也是私有的,外部程序无法获取
变量存储机制
JavaScript|剖析engine、runtime、call stack
闭包
闭包的简单定义是:函数 A内部有一个函数 B,并且函数 B 中使用了函数 A 的变量,函数 B 就被称为闭包。
关于闭包中变量的储存
三类闭包实例理解闭包为什么会占用内存以及如何让闭包不占用内存
协程与同步异步
异步就是靠协程或线程来实现
协程的目的是在单线程下实现并发
macrotask和microtask
MacroTask和MicroTask主要有如下若干种方法:
- macrotasks: setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, UI rendering
- microtasks: process.nextTick, Promises, Object.observe, MutationObserver
microTask调用优先级较高于macroTask
0 条评论
下一页
为你推荐
查看更多