对抗遗忘的方法是复习你的笔记。
看过去的内容马上就会忘记,用这种问答的方式记录下重点内容,复习的时候,就不用把一篇长文章从头看起。
clsss用法:
前置例子:
class Point {
constructor(x,y){
Object,assign(this, {x, y}) // 之前一版这里写错了 Object.assign(this, x, y), Object.assign里的参数是对象
}
toString(){
return `${this.x}, ${this.y}` // 类的方法里,使用this访问类的属性
}
}
// 实例
let point = new Point(3, 4)
-
实例是什么类型?类和实例有什么关系?
实例是对象类型。用
Object.prototype.call(point)
打印出来的结果是"[object Object]"
实例全称是类的实例。类相当于实例的构造函数。但是和构造函数相比,只能通过new方法调用,不能自执行。构造函数就是普通函数加一个new修饰符。
point.__proto__ === Point.prototype // true
以上等式在构造函数和实例之间,也是成立的。如下:
let f = function (){ this.a = 1 this.b = 2 } let o = new f() o.__proto__ === f.prototype //true
-
实例的属性哪些是自己的,哪些是原型的?判断属性是否是自己的用对象的什么方法?
定义在this上的属性就是自己的。其他的,就是原型的。
用hasOwnProperty( )方法判断属性是否在对象自身
point.hasOwnProperty("toString") // false point.__proto__.hasOwnProperty("toString") // true
-
实例如何访问定义在类上的方法?
类上定义的方法,实例可以直接访问
point.toString() // "3,4"
-
如何给类的某个属性设置存值和取值函数?
在类的内部使用set和get,对某个属性设置存值函数和取值函数
javascript class MyClass { constructor() { // ... } get prop() { return 'getter'; } set prop(value) { console.log('setter: '+value); } }
-
类的属性名表达式是什么,怎么写的?
类的属性名用表达式来写。将变量写在方括号里,如下:
let methodName = "something" [methodName](){ }
-
类可以用表达式形式定义吗?写一个立即执行的类
可以。
let person = new class Me{ constructor(name){ this.name = name } sayName(){ consle.log(this.name) } }("joy")
- ES6内部还需要用use strict吗?
不需要。ES6 实际上把整个语言升级到了严格模式。
- 类有变量提升吗?
没有。因此子类要定义在父类后面。
-
类的name属性怎么取? 类对外是用的什么符号?
name是class后面的变量名。类对外的符号是等号左边的变量。
let myPoint = class Point{} myPoint.name // Point // myPoint指代了Point类
- 如何判别Generator方法?
某方法之前加了星号(*),表示该方法是geneator函数
- 类的方法中的this指向的是什么?如果将方法单独提出来呢?怎么让this指向实例?
类的方法的this指向的是类实例。如果单独提出来指向的是undefined。让this指向实例有3种方法: ①构造函数绑定this(函数的bind方法) ②用箭头函数 ③用proxy,获取方法的时候,自动绑定this
-
什么是静态方法,举例说明?如何调用静态方法?
一个方法前加了static,它就是静态方法。如下:
class Foo{ static classMethod(){ return "hello" } } Foo.classMethod() //静态方法在类上调用
静态方法直接通过类来调用
- 类中定义的方法,都会被实例继承吗?
类中定义的非静态方法都会被实例继承。
- 静态方法中的this,指向什么?
指向类
- 实例的属性除了写在constructor中,还能写在哪里?
写在constructor 或者写在顶层,效果一样。
- 静态属性如何定义?
写在类的外面
Foo.prop = 1
或者在属性前加static修饰符static prop= 2
- 什么是私有属性和私有方法? 如何区别他们和别的属性或方法。
私有方法和私有属性,是只能在类的内部访问的方法和属性,外部不能访问。私有属性的方法:
①命名区别 ②方法移除到模块外 ③利用
Symbol
值的唯一私有属性的提案:
在属性和方法前面加#,表示私有
-
new.target属性的应用场景?
ES6 为new命令引入了一个new.target属性,该属性一般用在构造函数之中,返回new命令作用于的那个构造函数。
能写出不能独立使用、必须继承后才能使用的类
class Shape { constructor() { if (new.target === Shape) { throw new Error('本类不能实例化'); } } } class Rectangle extends Shape { constructor(length, width) { super(); // ... } } var x = new Shape(); // 报错 var y = new Rectangle(3, 4); // 正确
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。