关于class的表达式写法

来源:2-2 ES6中的类

soso_crazy

2019-07-05 11:49:09

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<script>
// class表达式,可以立即执行class
let person = new (class {
constructor(name) {
this.name = name
}
sayName() {
console.log(this.name)
}
})('张三')
person.sayName()

//class
class Person {
constructor(name) {
this.name = name
this.sayName()
}
sayName() {
console.log(this.name)
}

speakName(name) {
console.log(name)
}
}
let people = new Person('李四')
Person.prototype.speakName('小五')
</script>
</body>
</html>


表达式的写法为什么不用在person.sayName()中传参?()()这种类似匿名函数自执行的写法在第二个括号传的参数是传进constructor()中还是传入constructor以外的方法中?
以上两种写法的区别是什么?各自的用法有什么区别?
用表达式写的class的constructor以外的方法是定义在实例化对象上的方法,还是定义在原型对象上?


写回答

1回答

好帮手慕言

2019-07-05

1、因为 sayName 中使用的是this.name, 而this.name 是在constructor中定义的,并且在这里传参了。

http://img.mukewang.com/climg/5d1f068300015efd04660335.jpg

2、第二个括号传的参数是传进constructor中的。

3、写法的区别:表达式写法的类,在使用完之后立即销毁. 直接声明的类  在使用完之后 还保留在内存中

4、用法的区别:如果一个类 你只想使用一次,那么就用表达式的写法。否则就用声明式写法

5、表达式写的class的constructor以外的方法是定义在原型对象上。

如果帮助到了你,欢迎采纳~祝学习愉快~

0

0 学习 · 10739 问题

查看课程