这是一篇乱七八糟的随笔。
class是ES6新增的特性,用于解决JavaScript没有类的困惑。

--杂谈

ES5及之前,类都是用函数来替代,包括实例。

如:

 1 function Person(name) {
2 // this指向实例
3 this.name = name
4 this,,log = function () {
5 console.log('name is ' + name)
6 }
7 }
8
9 // 或者
10 Person.prototype.changeName = function (name) {
11 this.name = name
12 console.log('new name is ' + name)
13 }
14
15 var p = new Person(‘zhangsan’)
16 p.name // zhangsan
17 p.log() // name is zhangsan
18 p.changeName('lisi') // new name is Lisi

class本质上是function的语法糖,不过class的写法更加清晰可见,也更符合面向对象。

由于本质是语法糖,所以偶尔会遇到比如Class转function,function转Class的题目

上面转为class代码如下

 1 class Person {
2 // constructor是类的构造函数
3 constructor (name) {
4 this.name = name
5 }
6 log () {
7 console.log(`name is ${this.name}`)
8 }
9 changeName(name) {
10 this.name = name
11 console.log(`new name is ${this.name}`)
12 }
13 }
14
15
16 var p = new Person('zhangsan'); // 上同

相比函数来声明更加清晰易懂。

class本质也是函数

typeof Person // functionA

类的所有方法都定义在prototype上面

所有上诉的类其实等同于下

Person,prototype = {
log () {...},
changeName(name) {...}
}

类里的内容,除非使用this来表示,则表示内容在实例上,否则都是属于类。

实例在调用方法时候,其实就是调用类上面的原型方法。

p.constructor === Person.prototype.constructor
// p 表示Person的实例
p.hasOwnProperty('name') // true
p.hasOwnProperty('log') // false
p.__proto__.hasOwnProperty('log') // true

类的所有实例共享一个原型对象,所以

p1.__proto__ = p2.__proto__
还可以通过__proto__来增加类的方法
p.__proto__.printName = function () { return this.name };zha

当然这样声明不好,会使得逻辑变得混乱,增加的时候也需要很谨慎,同时不方便管理

-- 其他

class还有许多新的特性,比如支持getter和setter

如:

get 和 set

静态属性,静态方法(只能在类内部使用)

私有属性,通过 #  来声明,如 #count

本来想写许多,想想还是不用记录那么多,主要用于作于记录之用,需要详细还是阅读ES6比较轻松。

一个热爱编程的猴子,感谢与你相遇。

知识就像海洋,搁浅都不一定能见到彼岸。

共勉。

ES6里class杂乱随笔的更多相关文章

  1. 进阶路上有你我-相互相持篇之ES6里箭头函数里的this指向问题

    首先复习下普通函数里的this指向: function test(){ console.log(this) } test() 你会秒杀的毫无疑问的回答:window,针对普通函数:谁调用了函数  函数 ...

  2. es6里class类

    /** * Created by issuser on 2018/11/27. *///如果静态方法包含this关键字,这个this指的是类,而不是实例./** (1)类的实例属性 1.类的实例属性可 ...

  3. ES6里关于类的拓展(一)

    大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScript 6中 ...

  4. ES6里关于作用域的拓展:块级作用域

    过去,javascript缺乏块级作用域,var声明时的声明提升.属性变量等行为让人困惑.ES6的新语法可以帮助我们更好地控制作用域. 一.var声明 1.变量提升:var声明会发生“变量提升”现象, ...

  5. ES6里关于函数的拓展(三)

    一.箭头函数 在ES6中,箭头函数是其中最有趣的新增特性.顾名思义,箭头函数是一种使用箭头(=>)定义函数的新语法,但是它与传统的JS函数有些许不同,主要集中在以下方面: 1.没有this.su ...

  6. ES6里关于函数的拓展(二)

    一.构造函数 Function构造函数是JS语法中很少被用到的一部分,通常我们用它来动态创建新的函数.这种构造函数接受字符串形式的参数,分别为函数参数及函数体 var add = new Functi ...

  7. ES6里关于模板字面量的拓展

    JS 的字符串相对其他语言来说功能总是有限的,事实上,ES5中一直缺乏许多特性,如多行字符串.字符串格式化.HTML转义等.ES6通过模板字面量的方式进行了填补,模板字面量试着跳出JS已有的字符串体系 ...

  8. es6里面的arr方法

    es6里面,关于arr的遍历以及查找,新增了很多的方法,对于不同的应用场景,运用合适的方法,可以达到事半功倍的效果: 一, arr.find():用于查找到符合条件的第一个成员,如果没有查找到的话,则 ...

  9. ES6里新添加了两个很好用的东西,set和Array.from。

    set是一种新的数据结构,它可以接收一个数组或者是类数组对象,自动去重其中的重复项目. 在这我们可以看见,重复的项目已经被去掉了,包括NaN.正常情况下,NaN === NaN 返回的是false,但 ...

随机推荐

  1. TB级倾斜模型加载速度太慢?这是我见过最快的加载方式没有之一

    随着无人机性能快速提升,单个项目涉及到的倾斜摄影模型数据范围.数据量及单个模型体积也在不断变大,带来的问题是数据显示速度却越来越慢,那么如何在不升级配置的情况下提升模型的加载速度呢?   TB级倾斜摄 ...

  2. oh-my-zsh超级终端

    _ _ ___ | |__ _ __ ___ _ _ _______| |__ / _ \| '_ \ _____| '_ ` _ \| | | |____|_ / __| '_ \ | (_) | ...

  3. 跟我一起学.NetCore之路由的最佳实现

    前言 路由,这词绝对不陌生,不管在前端还是后端都经常提到,而这节不说其他,就聊.NetCore的路由:在之前的Asp.Net MVC 中,路由算是面试时必问的考点,可见其重要性,它的主要作用是映射UR ...

  4. python自动保存百度网盘资源

    觉得有帮助的别忘了关注一下知识图谱与大数据公众号,完整代码移步从今天开始种树 开始 在上一文中,我们保存了百度云盘的地址和提取码,但是这种分享链接很容易被屏蔽,最好的做法就是保存资源到自己的网盘,不过 ...

  5. redis 的基本使用

    Linux上查看redis是否运行 ps -ef | grep redis  还能查看到Linux的安装路径. set  rediskey  redisvalue  在redis里面存储了一个名称为r ...

  6. 《SpringCloudDubbo开发日记》(一)Nacos连官方文档都没写好

    背景 现在的微服务框架一般分dubbo和springcloud两套服务治理体系,dubbo是基于zookeeper为注册中心,springcloud是基于eureka作为注册中心. 但是现在eurek ...

  7. 项目里出现两个配置类继承WebMvcConfigurationSupport时,为什么只有一个会生效(源码分析)

    为什么我们的项目里出现两个配置类继承WebMvcConfigurationSupport时,只有一个会生效.我在网上找了半天都是说结果的,没有人分析源码到底是为啥,博主准备讲解一下,希望可以帮到大家! ...

  8. makefile实验二 对目标的深入理解 以及rebuild build clean的实现

    (一) rebuild build clean的实现 新知识点: 当一个目标的依赖是一个伪目标时,这个伪目标的规则一定会被执行. 贴实验代码 CC := gcc Target := helloworl ...

  9. Matlab绘制子图subplot使用攻略

    参考:https://jingyan.baidu.com/article/915fc414ad794b51394b20e1.html Matlab绘制子图subplot使用攻略 听语音 原创 | 浏览 ...

  10. JDBC Java 程序从 MySQL 数据库中读取数据,并封装到 Javabean 对象中

    MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 连接 MySQL 数据库 用于测试的 M ...