JS高级-ES6
let/const
变量和常量
不能重复定义
case1
{
//js
var a = 10
a = 20
// es6
let b = 10
b = 30
const c = 10
c = 40 //报错
}
存在块级作用域
case2
{
const obj = {
a: 10
}
obj.b = 20
}
多行字符串/模板变量
case
{
var name = 'susan', age = 18, html = ''
//JS
html += '<div>' +
'<p>' + name + '</p>' +
'<p>' + age + '</p>' +
'</div>'
//ES6
html += `<div>
<p>${name}</p>
<p>${age}</p>
</div>
`
}
解构赋值
case1
{
var obj = {
a: 10,
b: 20
}
// JS
var a = obj.a
var b = obj.b
// ES6
let {a, b} = obj
}
case2
{
function fn(){
return {
a: 10,
b: 20
}
}
let {a, b} = fn()
console.log(a, b)
}
块级作用域
case
{
var arr = [1, 2, 3, 4, 5]
// JS
for(var i = 0; i < arr.length; i++) {}
console.log(i)
// ES6
for (let j = 0; j < arr.length; j++) {}
console.log(j)
}
函数默认参数
case
{
// JS
function fn(a, b) {
if (b==null){
b=0
}
}
// ES6
function fn(a, b=0){}
}
箭头函数
case1
{
var arr = [1, 2, 3, 4, 5]
// JS
var arr1 = arr.map(function(item) {
return item+1
})
console.log(arr1)
// ES6
let arr2 = arr.map(item => item+1)
let arr3 = arr.map((item, index) => {
return item+index
})
console.log(arr2)
console.log(arr3)
}
case2
{
function fn() {
var arr = [1, 2, 3, 4, 5]
console.log('fn: '+this)
arr.map(function(item){
console.log('JS: '+this)
})
arr.map(item=>{
console.log('ES6: '+this)
})
}
fn.call({a:10})
}
分析:第一个this是{a:10},第二个this是window对象,第三个this是{a:10}。
Class
先回顾下JS构造函数
case
{
function MathHandle(x,y){
this.x=x
this.y=y
}
MathHandle.prototype.add=function(){
return this.x+this.y
}
var m = new MathHandle(1,2)
console.log(m.add())
}
然后我们看下class语法
{
class MathHandle {
constructor(x,y){
this.x=x
this.y=y
}
add(){
return this.x+this.y
}
} var m = new MathHandle(1,2)
console.log(m.add())
console.log(typeof MathHandle)
console.log(MathHandle === MathHandle.prototype.constructor)
console.log(m.__proto__ === MathHandle.prototype)
}
上面case我们后面添加了2个console
typeof MathHandle // function
MathHandle === MathHandle.prototype.constructor // true
m.__proto__ === MathHandle.prototype // true
我们可以看出class是语法糖,它的本质还是function
继承
先看下JS的继承如何书写
case
function Animal(name){
this.name = name
this.eat = function(){
console.log(this.name + ' eat')
}
}
function Dog(name){
Animal.call(this, name)
this.bark = function(){
console.log(this.name + ' bark')
}
}
Dog.prototype = new Animal()
var dog = new Dog('hashiqi')
dog.bark()
dog.eat()
ps:原型链继承可以继承构造函数里面以及原型链上的属性和方法,实例化子类的时候没法给父类传值。对象冒充继承,没法继承原型链上的属性和方法。
然后看下es6继承如何实现
{
class Animal{
constructor(name){
this.name=name
}
eat(){
console.log(`${this.name}+ eat`)
}
}
class Dog extends Animal{
constructor(name){
super(name)
this.name=name
}
bark(){
console.log(`${this.name} bark`)
}
}
const dog = new Dog('gou')
dog.bark()
dog.eat()
}
Promise的基本语法
解决Callback Hell
case
{
function loadImg(src, callback, fail) {
var img = document.createElement('img')
img.onload=function(){
callback&&callback(img)
}
img.onerror=function(){
fail()
}
img.src=src
}
var src='https://......jpeg'
loadImg(src, function(){
console.log('success')
}, function(){
console.log('fail')
})
}
case2
{
function loadImg(src) {
const promise = new Promise(function(resolve, reject){
var img = document.createElement('img')
img.onload=function(){
resolve(img)
}
img.onerror=function(){
reject()
}
img.src=src
})
return promise
} var src='https://.....jpeg'
var result = loadImg(src)
result.then(function(img){
console.log('success', img)
}, function(){
console.log('fail')
})
result.then(function(img){
console.log('success', img.height)
})
}
new Promise 并返回promise
有两个函数参数,函数有resolve,reject
成功执行resolve,失败调用reject
then监听结果
模块化
case1
export let A = 123 export function test(){
console.log('test')
}
export class Hello {
test(){
console.log('hello')
}
}
import {A, test, Hello} from './a' console.log(A, test, Hello)
import * as m from './a' console.log(m.A, m.test, m.Hello)
case2
let A = 123 function test(){
console.log('test')
}
class Hello {
test(){
console.log('hello')
}
}
export default{
A,
test,
Hello
}
import m from './a' console.log(m.A, m.test, m.Hello)
注意有无default
JS高级-ES6的更多相关文章
- js高级-面向对象继承
一.工厂模式创建对象及优缺点 继承就是把公共的部分抽象出来作为父类,基类.吃饭,跑步等 var a = {}; //批量创建不方便,不能重复设置公共属性的代码 //工厂模式出现了,创建10个Cat对象 ...
- JS高级(摘自简书)
JS高级 1. 访问对象属性(方法也是属性)的通用方式:obj['属性名'] 1. 属性名包含特殊字符,如"-".空格,访问:obj['content-type'] 2. 属性名不 ...
- js高级之函数高级部分
基于尚硅谷的尚硅谷JavaScript高级教程提供笔记撰写,加入一些个人理解 github源码 博客下载 原型与原型链 prototype : 显式原型属性,它默认指向一个Object空对象(即称为: ...
- JS高级前端开发群加群说明及如何晋级
JS高级前端开发群加群说明 一.文章背景: 二. 高级群: 三. 加入方式: 四. 说明: 一.文章背景: 去年年初建了几个群,在不经意间火了,一直排在“前端开发”关键字搜索结果第一名.当然取得这 ...
- 前端进阶试题css(来自js高级前端开发---豪情)既然被发现了HOHO,那我就置顶了嘿嘿!觉得自己技术OK的可以把这套题目做完哦,然后加入高级前端的社区咯
http://www.cnblogs.com/jikey/p/4426105.html js高级前端开发加群方法(此群很难进,里面纯技术,严禁广告,水群) 完整题目做完发邮箱(jikeytang@16 ...
- Node.js高级编程读书笔记Outline
Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...
- 读JS高级——第五章-引用类型 _记录
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定
js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定 addEventListener()与removeEventListener( ...
- 《JS高级程序设计》笔记 —— 解析查询字符串
今天在继续翻阅<JS高级程序设计>的时候,正好翻到location对象这一小节,其中有一部分就是讲的解析查询字符串.看到这个内容立马想到了做去哪儿秋招笔试题的时候有这么一道题. 去哪儿笔试 ...
随机推荐
- 转载:escape,encodeURI,encodeURIComponent有什么区别?
escape unescape encodeURI decodeURI encodeURIComponent decodeURIComponent 这六个方法功能有关联,如果不清楚每一个的作用,很容易 ...
- springCloud配置本地配中心SpringCloudConfig
多环境配置 在一般开发过程中如果调试都在本地进行,则可以设置一个多环境配置,在本地与线上配置间来回切换. springcloud默认会访问的配置文件名是application.properties, ...
- 使用mybatis generator插件,自动生成dao、dto、mapper等文件
mybatis generator 介绍 mybatis generator中文文档http://mbg.cndocs.tk/ MyBatis Generator (MBG) 是一个Mybatis的代 ...
- document.write与document.getElementById的区别
document.write改变的是整个HTML页面(文档),document.getElementById("demo").innerHTML= 改变的是局部属性
- php源代码安装
1.在官网下载php安装源文件.版本选择5的最新稳定版. [root@trial download]# wget http://cn.php.net/distributions/php-5.5.38. ...
- Building tools 为什么是主流?
一.building tools 为什么主流? Gradle 是目前比较流行的构建工具之一,Android Studio 中集成的就是 Gradle,并针对 Android 应用开发了插件 Gradl ...
- Oracle创建表空间报错:O/S-Error: (OS 3) 系统找不到指定的路径
创建sql: CREATE TABLESPACE TBSP_1 DATAFILE 'E:/oracle/product/10.2.0/tablespaces/weblogic.dbf' ...
- 在eclipse中启动java程序的时候,每次都会在一个未设置断点的源码里面,卡断点
可以通过取消这个勾选框,来阻止代码在未设置断点的地方停止 具体位置在:Preferences--Java--Debug
- java知识点归集
将工作中,或者看书的过程中碰到的自己之前没有掌握的知识点进行归纳,暂时就碰到什么写什么,后续有一定量的话进行整理: 1. list实现 相关文章:https://zhuanlan.zhihu.com ...
- 【持续更新】 | OpenCV 学习笔记
本文地址:http://www.cnblogs.com/QingHuan/p/7365732.html,转载请注明出处 ######################################## ...