[每天解决一问题系列 - 0001] Javascript apply和 call对比
2024-10-16 18:14:12
相同点:
- 每个函数都包含这两个原生的方法
- 他们两个的效果是一样的,用于在特定的作用域下执行函数,本质上是设置函数内this对象的值。
不同点:
- 传入的参数类型不同 。 apply(函数作用域,array[参数]), call(函数作用域,参数1, 参数2, 参数3...). 注意:函数作用域 参数不传或者null,默认为window;在严格模式下则为undefined, 即无效的作用域。
应用场景:
- 这两个函数最大的作用在于扩充函数赖以运行的作用域,其好处在于对象不需要与方法有任何的耦合关系,用“借鸡生蛋”来形容最恰当不过了。
- 示例
window.color = "red";
var o = ( color: Oblue);
function sayColor(){
alert(this.color);
sayColor() ; //red
øayColor.ca11(tbis); // red
øayColor.ca11(window); // red
øayColor.call(o); //blue
补充:
- 在ECMAScript 5中还定义了一个方法bind(), 这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值.
- 示例
window.color = "red";
var o = ( color: "blue " );
function sayColor(){
alert(this.color);
var objectSayColor = sayColor.bind(o);objectSayColor(); // blue
支持bind() 方法的浏览器有IE9+、Firefox4+ 、Safari 5.1+ 、Opera 12+和Chrome 。
参照:
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
最新文章
- AnjularJS系列4 —— 单个页面加载多个ng-App
- Directive间的通信
- 冰冻三尺非一日之寒--rabbitMQ,redis
- response.sendRedirect()与request.getRequestDispatcher().forward()区别
- ios基础篇(二十六)—— UITableViewCell的分组索引与标记
- NLP情感分析监督学习样本打标
- Access界面基础操作
- 网络流 最大流HDU 3549
- ACM/ICPC 之 Floyd范例两道(POJ2570-POJ2263)
- .Net事件管道详解图
- 部署windows服务
- 华为OJ平台——将真分数分解为埃及分数
- ISO9001、ISO14001、OHSAS18000什么意思
- sqlplus 连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0
- java- 枚举的常见用法
- 解决读写properties属性文件
- chrome浏览器360浏览器图片无法加载提示等待可用套接字问题
- Python爬虫Scrapy(二)_入门案例
- C++后台实践:古老的CGI与Web开发
- 几行c#代码,轻松搞定一个女大学生