js的第14天


前言

          上节课介绍到this关键字的概念,这节课我们来学习如何改变this指向(改变this的默认指向),今天还要学习Es6新特性,ES6 经过持续几年的磨砺,它已成为 JS 有史以来最实质的升级,特性涵盖范围甚广, 小到受欢迎的语法糖,例如箭头函数 (arrow functions)和简单的字符串插值 (string interpolation),大到烧脑的新概念,例如代理 (proxies)和生成器 (generators);它将彻底改变程序员们编写JS代码的方式。

 


一、改变this指向

1)函数方法call方法:附加在函数调用后使用,可以忽略本身的this指向

函数名.call(this指向的新对象,参数1,参数2...)

对象方法.call(this指向的新对象,参数1,参数2...)

2)apply方法

函数名.apply(this指向新对象,[参数1,参数2...])

对象方法.apply(this指向新对象,[参数1,参数2...])

3)bind方法

var 新函数 = 函数名.bind(this指向新对象)

var 新函数 = 对象方法.bind(this指向新对象)

新函数(参数1,参数2....)

代码如下:(示例)

 <button>按钮</button>

    <script>
        var obj = {
            name:'jack'
        }

        var btn = document.querySelector('button')

        btn.addEventListener('click',function(){
            console.log('this -> ',this)
        })


        function fun(m,n){
            console.log('m ',m, ' n ',n);
            console.log('this -> ',this) // window -> obj
        }
        // fun()
        // fun.call(obj,10,20)
        // fun.apply(obj,[10,20])
        var newFun = fun.bind(obj)
        newFun(10,20)

    </script>

 


二、ES6新特性

1)let和const关键字(用于声明变量)

1. let 和 const 关键字

声明变量

var num

let num

const num

2. 区别

let 和 var

1.let没有变量提升(预解析) let声明变必须先定义再使用

console.log(num)

var num = 100

2. let声明的变量,不能重复声明变量

var num = 100

var num = 200

3. let具块作用域

全局作用域

局部作用域

块作用域 let

const 和 let

const声明的变量称为常量,只能赋值一次

const num = 100

num = 200 x报错

3. 应用场景

1.考虑兼容问题

使用var

2. 变量可以多次改变值

let

3. 变量只赋值一次后,不再改变

const

2)箭头函数

1.定义函数方式

function fn(){} 声明式

var fn = function(){} 函数表达式

()=>箭头函数

2.箭头函数的作用

作用:简化函数(匿名函数)的书写

语法:

()=>{}

function(){

}

3.箭头函数的简写

简写:

1. 形参只有一个, 括号可以省略

(m)=>{}

m => {}

2. 函数体只有一行代码 大括号省略

() => {console.log('>>>')}

() => console.log('>>>')

()=> {return 100}

3.只有一行代码,并且代码是return语句,大括号和return都可省略

() => 100

 代码如下:(示例)

const btn = document.querySelector('button')
			btn.addEventListener('click', () => {
				console.log('函数体代码')
			})

			const obj = {
				name: 'jack',
				say: () => {
					console.log('say>>>>')
				},
			}
			obj.say()

4.箭头函数this指向问题

箭头函数this指向问题

1. 在事件处理函数中this->事件源

2. 箭头函数中this指向 应用上下文中this对象

应用上下文this对象

 代码如下:(示例) 

<button>按钮</button>
		<script>
			const btn = document.querySelector('button')
			console.log('this -> ', this) // 应用上下文this对象

			function test1() {
				btn.addEventListener('click', () => {
					console.log('this -> ', this)    //指向window
				})

				const obj = {
					name: 'jack',
					say: () => {
						console.log('obj this -> ', this)
					},
				}
				obj.say()
			}
</script>

3)函数参数默认值

ES5 实现方式

m = m || 100

ES6 实现方式

function fun(m = 100){}

4)解构赋值

解构赋值:快速从对象或数组中取出成员的一个语法方式

let { name, age } = obj

注: 大括号中变量名必须与对象属性名相同

解构数组:

const arr=[1,2,3]

let[a,b,c]=arr         //a=1,b=2,c=3 

  代码如下:(示例) 

function test2() {
				const arr = [1, 2, 3]

				// let a = arr[0]
				// let b = arr[1]
				// let c = arr[2]

				let [a, b, c] = arr // 数组解构赋值

				console.log('a :', a, ' b :', b, ' c :', c)
			}
			test2()

5)展开运算符

展开运算符(...)

let[a,b,c]=arr

...arr  ==>1  2  3

展开运算符作用

1.数组合并

let arr=[1,2,3]               

let arr1=[4,5]

let arr2=[...arr,...arr1]             //[1,2,3,4,5]

2.对象合并

let obj={name:'jack' ,age:18}

let obj2={

...obj,

score:98

}                    //{name:'jack' ,age:18,score:98}

3.函数传递多个参数

let arr=[1,2,3]

function fun(a,b,c){                     }

fun(...arr)

6)对象字面量简化写法

对象字面量简化写法:对象属性名和值变量名相同时,只写一个

let name = 'jane'
			let age = 28

			// let obj = {
			//     name:name,
			//     age:age
			// }
			let obj = { name, age }

			console.log(obj) // {name: 'jane', age: 18}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值