js中call()、apply()、bind() 的用法

js中call()、apply()、bind() 的用法

JavaScript 中 call()、apply()、bind() 的用法

例子1

	var name = "张三";
    var age = 16
    var obj = {
      name: "李四",
      objAge: this.age,
      myFun: function () {
        console.log(this.name + "年龄" + this.age)//this指向obj
    	}
	}
       console.log(obj.objAge)//16
       obj.myFun()//李四年龄undefined

例子2

    var nameTwo = "王五"
    function shows() {
      console.log(this.nameTwo)
    }
    shows() //王五

分析this差别:第一个打印里面的 this 指向 obj,第二个全局声明的 shows() 函数 this 是 window ;

1、call()、apply()、bind() 重新定义对象的this指向
	var name = "张三";
    var age = 16
    var obj = {
      name: "李四",
      objAge: this.age,
      myFun: function () {
        console.log(this.name + "年龄" + this.age)//this指向obj
    	}
	}
	var obj1 = {
	   name:"王麻子",
	   age:26	
	}

	obj.myFun.call(obj1)	//王麻子年龄26
	obj.myFun.apply(obj1)	//王麻子年龄26	
	obj.myFun.bind(obj1)()	//王麻子年龄26
VM78:7	王麻子年龄26
VM78:7 	王麻子年龄26
VM78:7 ƒ () {
        console.log(this.name + "年龄" + this.age)//this指向obj
    	}

结论:
bind 方法后面多了个 () 外 ,结果返回都一致!
bind方法返回的是一个函数,必须调用它才会被执行。

2、call()、apply()、bind() 传参
	var name = "张三";
    var age = 16
    var obj = {
      name: "李四",
      objAge: this.age,
      myFun: function (one,two) {
        console.log(this.name + "年龄" + this.age,``+one+``+two)//this指向obj
    	}
	}
	var obj1 = {
	   name:"王麻子",
	   age:26	
	}

	obj.myFun.call(obj1,"成都","上海")		//王麻子年龄26 从成都去上海
	obj.myFun.apply(obj1,["成都","上海"])	//王麻子年龄26 从成都去上海	
	obj.myFun.bind(obj1,["成都","上海"])()	//王麻子年龄26 从成都,上海去undefined
	obj.myFun.bind(obj1,"成都","上海")()		//王麻子年龄26 从成都去上海

总结:
1、call、bind传参方式相同,参数都是直接放进去用逗号隔开;不同的是bind返回的是一个新的函数,必须调用才会执行。
2、apply传参,所有参数必须放在数组中传进去。
3、参数不限制,可以是任意类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值