}
var descriptor = Object.getOwnPropertyDescriptor(
CustomHTMLElement.prototype, “name”
);
-
类的get和set和以前的构造函数的是一样的
-
存值函数和取值函数是设置在属性的 Descriptor 对象上的
类的奇葩写法(直接法)
// 1.
const MyClass = class My {
getClassName() {
return My.name;
}
};
let my = new MyClass();
// 2.
const person = new class My {
getClassName() {
return My.name;
}
};
person.getClassName();
- 外部调用用
MyClass
类名,内部调用用My
类名
类注意点
-
类的内部默认就是严格模式
use strict
-
类不存在声明提前,有临时性死区
-
this指向会随着调用者改变的
回到顶部 目录
语法:static 方法/属性
class Person{
static a = 20;
static fn(){
return ‘hello’;
}
}
Person.fn();
Person.a;
- 静态方法/属性的调用:静态方法是写着原型上面的,但是不能被继承
调用是直接调用:Person.fn();/Person.a;
-
静态方法的this:指向类
-
静态方法可以和非静态方法重名
-
静态方法可以在子类的super对象中调用
私有方法和私有属性:只能在内部访问,外部不能访问。遗憾的是es6没有面向对象中的私有方法和私有属性
- 第一种方法:在编程界内部人为规定一个,私有的用"_"开头
const a = Symbol(‘a’);
const b = Symbol(‘b’);
class myClass{
// 公有方法
foo(baz) {
thisa;
}
// 私有方法
a {
return this[b] = baz;
}
};
var c = new myClass();
Reflect.ownKeys(myClass.prototype)
- 第三种方法:
#
前缀代表私有属性(还没有出来)
回到顶部 目录
ES6为new命令引入了一个new.target属性,该属性一般用在构造函数之中,返回new命令作用于的那个构造函数
如果构造函数不是通过new命令或Reflect.construct()调用的,new.target会返回undefined
function Person(name) {
if (new.target === Person) {
this.name = name;
} else {
throw new Error(‘必须使用 new 命令生成实例’);
}
}
该方法也可以判断类,毕竟二者区别不大
性能优化
1.webpack打包文件体积过大?(最终打包为一个js文件)
2.如何优化webpack构建的性能
3.移动端的性能优化
4.Vue的SPA 如何优化加载速度
5.移动端300ms延迟
6.页面的重构
所有的知识点都有详细的解答,我整理成了280页PDF《前端校招面试真题精编解析》。