ES6里class杂乱随笔
这是一篇乱七八糟的随笔。
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杂乱随笔的更多相关文章
- 进阶路上有你我-相互相持篇之ES6里箭头函数里的this指向问题
首先复习下普通函数里的this指向: function test(){ console.log(this) } test() 你会秒杀的毫无疑问的回答:window,针对普通函数:谁调用了函数 函数 ...
- es6里class类
/** * Created by issuser on 2018/11/27. *///如果静态方法包含this关键字,这个this指的是类,而不是实例./** (1)类的实例属性 1.类的实例属性可 ...
- ES6里关于类的拓展(一)
大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScript 6中 ...
- ES6里关于作用域的拓展:块级作用域
过去,javascript缺乏块级作用域,var声明时的声明提升.属性变量等行为让人困惑.ES6的新语法可以帮助我们更好地控制作用域. 一.var声明 1.变量提升:var声明会发生“变量提升”现象, ...
- ES6里关于函数的拓展(三)
一.箭头函数 在ES6中,箭头函数是其中最有趣的新增特性.顾名思义,箭头函数是一种使用箭头(=>)定义函数的新语法,但是它与传统的JS函数有些许不同,主要集中在以下方面: 1.没有this.su ...
- ES6里关于函数的拓展(二)
一.构造函数 Function构造函数是JS语法中很少被用到的一部分,通常我们用它来动态创建新的函数.这种构造函数接受字符串形式的参数,分别为函数参数及函数体 var add = new Functi ...
- ES6里关于模板字面量的拓展
JS 的字符串相对其他语言来说功能总是有限的,事实上,ES5中一直缺乏许多特性,如多行字符串.字符串格式化.HTML转义等.ES6通过模板字面量的方式进行了填补,模板字面量试着跳出JS已有的字符串体系 ...
- es6里面的arr方法
es6里面,关于arr的遍历以及查找,新增了很多的方法,对于不同的应用场景,运用合适的方法,可以达到事半功倍的效果: 一, arr.find():用于查找到符合条件的第一个成员,如果没有查找到的话,则 ...
- ES6里新添加了两个很好用的东西,set和Array.from。
set是一种新的数据结构,它可以接收一个数组或者是类数组对象,自动去重其中的重复项目. 在这我们可以看见,重复的项目已经被去掉了,包括NaN.正常情况下,NaN === NaN 返回的是false,但 ...
随机推荐
- msf学习笔记
metasploit frame 这是一个渗透测试框架,围绕这个框架,我们就可以完成最终的目标,即渗透测试. 渗透测试者困扰:需要掌握数百个工具,上千条命令参数,很难记住. 新出现的漏洞PoC/EXP ...
- vue学习02-v-text
vue学习02-v-text 引入环境版本,cdn网络引用或者本地js应用 html的结构,一般是div 创建vue实例 el:挂载点 v-text指令的作用是设置标签的内容 默认写法会替换全部内容, ...
- centos 端口测试之nc使用
服务器端口测试是否正常,运维一般使用telnet来检查,但它有局限性,服务器的端口必须存在服务运行. 这时使用nc可以在服务端模拟开启一个端口,再通过nc测试此端口,好用! nc是netcat工具的简 ...
- Azure 内容审查器之文本审查
内容审查器 Azure 内容审查器也是一项认知服务.它支持对文本.图形.视频进行内容审核.可以过滤出某些不健康的内容,关键词.使你的网站内容符合当地的法律法规,提供更好的用户体验. 文本内容审核 其中 ...
- Go-项目环境搭建
Go-环境搭建两个参数 1. GOROOT Go SDK安装目录,Go语言安装目录 2. GOPATH 项目根目录 Go-项目目录结构 goProjectName 项目根目录 bin 项目编译后 ...
- spark-1-架构设计&基本流程
Spark运行架构包括: (1)集群资源管理器(Cluster Manager) (2)运行作业任务的工作节点(Worker Node) (3)每个应用的任务控制节点(Driver)和每个工作节点上负 ...
- P2947 Look Up S
题目描述: 约翰的N(1≤N≤10^5)头奶牛站成一排,奶牛i的身高是Hi(l≤Hi≤1,000,000).现在,每只奶牛都在向右看齐.对于奶牛i,如果奶牛j满足i<j且Hi<Hj,我们可 ...
- 剑指Offer(一):二维数组中的查找
一.前言 刷题平台:牛客网 二.题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整 ...
- 在java中使用SFTP协议安全的传输文件
本文介绍在Java中如何使用基于SSH的文件传输协议(SFTP)将文件从本地上传到远程服务器,或者将文件在两个服务器之间安全的传输.我们先来了解一下这几个协议 SSH 是较可靠,专为远程登录会话和其他 ...
- Java泛型的协变与逆变
泛型擦除 Java的泛型本质上不是真正的泛型,而是利用了类型擦除(type erasure),比如下面的代码就会出现错误: 报的错误是:both methods have same erasure ...