首页 > 代码库 > [每天解决一问题系列 - 0001] Javascript apply和 call对比
[每天解决一问题系列 - 0001] Javascript apply和 call对比
相同点:
- 每个函数都包含这两个原生的方法
- 他们两个的效果是一样的,用于在特定的作用域下执行函数,本质上是设置函数内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
[每天解决一问题系列 - 0001] Javascript apply和 call对比
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。