ES6
的Class
很多大部分的功能,ES5
都是可以实现的, 但是为什么还有出Class
呢? 这是因为ES5
中生成实例对象的方法是通过构造函数生成的。 这与我们所接触的很多语言(C++)差异很大。于是ES6
就提供了跟传统语言的写法。可以说Class
是一个语法糖。
ES6
的Class
很多大部分的功能,ES5
都是可以实现的, 但是为什么还有出Class
呢? 这是因为ES5
中生成实例对象的方法是通过构造函数生成的。 这与我们所接触的很多语言(C++)差异很大。于是ES6
就提供了跟传统语言的写法。可以说Class
是一个语法糖。
之前深入了解了**Object.defineProperty**。 发现ES6有一个新的对象(Proxy)也能实现属性拦截器的作用,但是功能更加强大。所以这里也学习学习,总结总结。
学习都是来自阮一峰老师。
了解到vue的实现原理是使用了Object.defineProperty()方法。 之前对这个方法没深入了解。知道的就只有这个方法可以设置对象的的属性。现在了解了之后,感觉还是有很多点很值得记录一下。
在JavaScript
中, 我们最常用的是数据结构应该是数组。但是对其他很多的编程语言来说,数组不是最佳的数据结构, 因为在其他的很多编程语言中,数组的长度是固定,如果数组的数据已经填满,再要加入新的数据就很困难。对于数组的删除和添加操作,通常需要将数组中的其他元素向后移或者向前移动,这些操作就很繁琐。
在JavaScript
中,数组是不存在上述的问题的,是因为在JavaScript
实现的时候被实现成了对象,但是这样设计之后JavaScript
中的数组就会比其他语言的效率低很多。
这时,就可以使用链表来代替它,它对数据是可以随机访问,并且链表可以在任何可以使用一维数组的情况中。
链表分成了很多种类:单向链表,双向链表,单向循环链表,双向循环链表。下面我们来实现一个单向链表,因为单向链表的使用最为广泛。
在使用vue
开发的时候,有一点觉得非常奇怪;使用new Vue()
的时候,data
是可以传入一个对象的;但是在组件中data
就必须为一个函数;vue
的官方文档是这么写的:
通过
Vue
构造器传入的各种选项大多数是可以在组件里使用。data
是一个例外,它必须是一个函数。如果定义成了一个对象,那么Vue
就会停止。并且会在控制台发出警告,告诉你在组件中data
必须是一个函数。
1 | // new Vue() ---- 实例 |
这是为什么?为什么在组件中data
就必须为一个函数。而new Vue()
的data
可为函数,可为对象