js中bind、call、apply区别和简单应用
2017-01-03 12:45
585 查看
1,js函数应用的时候都包含着隐式传递this的效果--而bind、call、apply是显式传递boj的效果;
2,显式是为了和别的obj(上下文)发生关系,bind是指定关系,然后再某个时刻运用这种关系,call、apply是指定这种关系并且立即运用;
以下是例子:
var simpleForm1 = {name:"yangzai",age:10,submit:function(){alert("name:"+this.name+",age:"+this.age);}};
document.getElementById("simpleForm1").onclick = simpleForm1.submit;//1-name:,age:undefined
document.getElementById("simpleForm1").onclick = function(){//2-name:yangzai,age:10
simpleForm1.submit();
};
document.getElementById("simpleForm1").onclick = simpleForm1.submit.bind(simpleForm1);//3-name:yangzai,age:10第一种:submit的引用指向已经便更,所以this.name不会再调用simpleForm1里面的属性;
第二种:建立匿名函数是一种方法,也很常用;
第三种:用bind改变引用关系,使this作用域回到simpleForm1对象中;
下面是call、apply的调用例子:
//call、apply调用时,可以显式改变js作用域--call、apply其实也是函数调用的一种方式,下面我们指定了作用域为simpleForm2
var simpleForm1 = {name:"yangzai",age:10,submit:function(){alert("name:"+this.name+",age:"+this.age);}};
var simpleForm2 = {name:"datou",age:20};
document.getElementById("simpleForm1").onclick = simpleForm1.submit.call(simpleForm2);//name:datou,age:20
document.getElementById("simpleForm1").onclick = simpleForm1.submit.apply(simpleForm2);//name:datou,age:20
2,显式是为了和别的obj(上下文)发生关系,bind是指定关系,然后再某个时刻运用这种关系,call、apply是指定这种关系并且立即运用;
以下是例子:
var simpleForm1 = {name:"yangzai",age:10,submit:function(){alert("name:"+this.name+",age:"+this.age);}};
document.getElementById("simpleForm1").onclick = simpleForm1.submit;//1-name:,age:undefined
document.getElementById("simpleForm1").onclick = function(){//2-name:yangzai,age:10
simpleForm1.submit();
};
document.getElementById("simpleForm1").onclick = simpleForm1.submit.bind(simpleForm1);//3-name:yangzai,age:10第一种:submit的引用指向已经便更,所以this.name不会再调用simpleForm1里面的属性;
第二种:建立匿名函数是一种方法,也很常用;
第三种:用bind改变引用关系,使this作用域回到simpleForm1对象中;
下面是call、apply的调用例子:
//call、apply调用时,可以显式改变js作用域--call、apply其实也是函数调用的一种方式,下面我们指定了作用域为simpleForm2
var simpleForm1 = {name:"yangzai",age:10,submit:function(){alert("name:"+this.name+",age:"+this.age);}};
var simpleForm2 = {name:"datou",age:20};
document.getElementById("simpleForm1").onclick = simpleForm1.submit.call(simpleForm2);//name:datou,age:20
document.getElementById("simpleForm1").onclick = simpleForm1.submit.apply(simpleForm2);//name:datou,age:20
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- 只需四个步骤几行代码,即可快速实现直播弹幕功能
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 在Windows 8.1的IE 11中屏蔽双击放大功能
- JavaScript 基础、进阶以及 Ubuntu 系统中的 JavaScript 开发调试工具
- 最后一次说说闭包
- Ajax
- HTML5调用摄像头实例
- 2019年开发人员应该学习的8个JavaScript框架
- Powershell 创建炫丽美观的Html报表
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 设计模式---状态模式在web前端中的应用
- 异步流程控制:7 行代码学会 co 模块