您的位置:首页 > 移动开发

call apply 与 bind

2016-03-04 09:44 323 查看
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
//结合js中的this查看下面代码
<script>
var demo1={
test1:"zyn",
fn:function(){
console.log(this.test1);
console.log(this);
}
}

demo1.fn();//zyn
//这里能够打印是因为,这里的this指向的是函数demo1
var exe=demo1.fn;
exe();//undefined
//这里的this指向的是window

//解析
//就是this指的是,调用函数的那个对象。(既调用fn函数的对象demo1)
//因为demo1的this指向的是window
// var exe=demo1.fn 相当于把 window赋值给exe
// exe();在window下面执行

//如果必须使用以上写法需用call,apply改变this指向
var exe=demo1.fn;
exe.apply(demo1);//zyn
exe.call(demo1);//zyn

//解决
//call,apply区别传参的方式不同
var demo1={
test1:"zyn",
fn:function(arg1,arg2){
console.log(this.test1);
console.log("--->>"+arg1+arg2);
}
}
var exe_this=demo1.fn;
exe_this.apply(demo1,["xx","yy"]);//zyn  xxyy
exe_this.call(demo1,"xx","yy");//zyn   xxyy
var c =exe_this.bind(demo1,"xx","yy"); //zyn   xxyy
c();
//注意如果call和apply的第一个参数写的是null,那么this指向的是window对象
//bind方法和call、apply方法有些不同,但是不管怎么说它们都可以用来改变this的指向。
//call和apply都是改变上下文中的this并立即执行这个函数,
//bind方法可以让对应的函数想什么时候调就什么时候调用,并且可以将参数在执行的时候添加,这是它们的区别
</script>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  对象