call()、apply()、bind()方法

call()、apply()、bind()方法

1、call()方法:调用函数,改变this指向

//call()方法主要用于继承
function Father(unanme,age,sex){
	this.name = name;
	this.age = age;
	this.sex = sex;
}
function Son(){
	Father.call(this,uname,age,sex);//调用Father,改变this指向
}
var son = new Son("张三"18"男")

2、apply()方法:调用函数,改变this指向

fun.apply(thisArg,[argsArray]);//thisArg为this指向,argsArray为传递的值,需要包含在数组里边
var o = {name:'andy'};
        function fn(arr){
            console.log(this);
            console.log(arr);
        }
        fn(o);	//这里的this指向window,arr指向o这个对象
        fn.apply(o,['pink']);//这里的this指向o,arr指向pink

apply()的主要应用:利用apply借助于数学内置对象求最大值

//Math.max();
var arr = [1,22,33,3,4];
var max = Math.max.apply(Math,arr);
console.log(max);

3、bind()方法:不会调用函数但是能够改变this指向。将函数绑定到某个对象。

fun.bind(thisArg,arg1,arg2...);//返回由指定的this值和初始化参数改造的原函数拷贝
//例子
var a = {
	b:function(){
		var func = function(){
			console.log(this.c);
		}
		func();
	},
	c:'Hello!'
}
a.b();//undefined 因为这里的this指向全局作用域,所以会返回undefined

通过赋值的方法将this赋值给that

var a = {
	b:function(){
		var that = this;
		var fun = function(){
			console.log(that.c)	
		}
		fun();
	},
	c:'Hello!'
}
a.b();//Hello

使用bind()改变this指向

var a = {
	b:function(){
		var fun = function(){
			console.log(this.c)	
		}
		fun.bind(this)();
	},
	c:'Hello!'
}
a.b();//Hello

bind()的另一种用法.
这里的bind方法会把第一个实惨绑定给f函数体内的this,所以这里的this指向{x:1}对象,从第二个参数起,会依次传递给原始函数,y=2,调用m(3)时,z=3,所以最终结果为6

function f(y,z){
	return this.x + y + z;
}
var m = f.bind({x:1},2);
console.log(m(3));//6

有的函数不需要立即调用,但是又想要改变这个函数内部的this指向,此时用bind()
(这里等待补充)

var canvas = {
	render:func
}

参考:https://blog.csdn.net/kongjunchao159/article/details/59113129

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值