一道题带你掌握class的基本用法

347 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

目录

今日题

  1. 题目
  2. 分析 昨日题
  3. 题目
  4. 答案
  5. 解析 结语

今日题

题目

var name = '蜘蛛侦探'
var age = 5

class Person {
    constructor(name = '鲨鱼辣椒') {
        this.name = name
    }

    sayName() {
        console.log(this.name)
    }

    sayAge() {
        var age = this ? this.age : 6
        console.log(age)
    }
}

var p = new Person('蜻蜓队长')
p.age = 7
var bar = p.sayAge

p.sayName()
bar()

分析

这是《JavaScript每日一题》专栏中第一次出现关于class的题目,所以我们所接触的这道题的难度不会太大,只会在基础的基础上再基础,下面开始分析题目。映入眼帘的就是两个由var声明的变量,这里我们要注意使用var声明的变量都含有哪些特性(会追加到window对象中...等)。然后是定义了一个Person类,关于class的特点,我们以后再具体考察,此处先掌握其使用,class中的constructor会初始化实例对象的name属性,而后又定义了sayNamesayAge两个方法,要注意这两个方法是定义在哪里的?是定义在Person的实例上还是Person的原型上,或者说是定义在Perosn本身上,这些都要搞明白。最后是使用new调用Person给了p,给p添加一个age属性,然后将p.sayAge赋值给了bar,随后调用bar,这里要搞清楚为什么要赋值给bar,而不是直接调用p.sayAge,这样做的目的是什么?

昨日题

题目

const content = `${{} && 'typeof'}${NaN && `false`}`
console.log(content)

答案

'typeofNaN'

解析

两行代码,应该是“有史以来”行数最少的一道每日一题了,但行数并不代表难度,这道题里里外外考察的知识点还是挺多的,下面就让我们来一起分析一下。模板字符串中包含{} && 'typeof'NaN && 'false',我们在昨天的分析中已经说了两个口诀,那就是&&是“一假则假,全真则真”,||是“一真则真,全假则假”。在{} && 'typeof'中我们知道对象转为布尔值永远都是true,而字符串'typeof'转为布尔值也是true,所以符合“全真则真”,那么这个{} && 'typeof'是成立的,而它的返回值却不是true,而是'typeof',这是因为&&、||在条件成立的情况下会返回后者表达式的值,也就是说{} && 'typeof'的返回值为'typeof'。同样,由于NaN为false,所以符合“一假则假”,所以NaN && 'false'的返回值为NaN,而不是false,这是因为当&&、||在条件不成立的情况下,会返回不成立的那个值。

结语

此文章已收录至《JavaScript每日一题》专栏,如果你对本专栏有任何建议,欢迎反馈。如果你对此文章中的题目还有不懂的地方,那么请在评论区留言与大家一起讨论吧。
创作不易,少年,就请留个赞再走吧!