JavaScript中的call、apply
来源:互联网 发布:c语言goto语句的用法 编辑:程序博客网 时间:2024/04/30 00:09
JavaScript中的call、apply
call
JavaScript中的call是调用一个函数,在调用函数时,将this的值绑定为call参数中的第一个参数。
var bye = function(param, param2){ console.log(this); console.log(param); console.log(param2); console.log("bye"); console.log(this.x)}t = {'x': 1};bye.call(t, 1, 2);
其结果为:
Object {x: 1}
1
2
bye
1
当然,我们也可以将this值绑定为一个原始值,调用上述函数:
bye.call(5, 1, 2);
其结果为:
Number {[[PrimitiveValue]]: 5}
1
2
bye
在non-strict 模式下,如果我们将null,undefined和原始类型的值传给this参数,其this值将被global代替,在MDN中有这样的说明:
thisArg
The value of this provided for the call to fun. Note that this may not be the actual value seen by the method: if the method is a function in non-strict mode code, null and undefined will be replaced with the global object, and primitive values will be boxed.
call函数的作用就是我们在调用方法时可以设定一个不同的对象,因为其默认的对象就是当前对象,正因为这样,我们可以只写一次该方法,在另一对象中继承该方法,然后调用它,而不需要再写一遍该方法。MDN中对该方法的介绍:
You can assign a different this object when calling an existing function. this refers to the current object, the calling object. With call, you can write a method once and then inherit it in another object, without having to rewrite the method for the new object.
应用场景一:利用call实现继承(Using call to chain constructors for an object)
function Product(name, price) { this.name = name; this.price = price; if (price < 0) { throw RangeError('Cannot create product ' + this.name + ' with a negative price'); } return this;}function Food(name, price) { Product.call(this, name, price); this.category = 'food';}Food.prototype = Object.create(Product.prototype);function Toy(name, price) { Product.call(this, name, price); this.category = 'toy';}Toy.prototype = Object.create(Product.prototype);var cheese = new Food('feta', 5);var fun = new Toy('robot', 40);
Food和Toy利用call继承了Product的name和price,然后各自又有了category 属性。
应用场景二:利用call调用匿名函数(Using call to invoke an anonymous function)
var animals = [ { species: 'Lion', name: 'King' }, { species: 'Whale', name: 'Fail' }];for (var i = 0; i < animals.length; i++) { (function(i) { this.print = function() { console.log('#' + i + ' ' + this.species + ': ' + this.name); } this.print(); }).call(animals[i], i);}
apply
apply与call几乎完全相同,只是在传递参数时apply传递的是数组(array)或者是类似数组的对象( array-like object),其调用方式:
fun.apply(this, ['eat', 'bananas']);fun.apply(this, new Array('eat', 'bananas'));
- JavaScript中的call、apply
- JavaScript中的call和apply
- javascript中的apply&call方法
- JavaScript中的call和apply
- javascript中的apply和call
- JavaScript中的call和apply
- javascript中的apply和call
- javascript中的call和apply
- Javascript中的apply和call
- javascript 中的call、apply、bind
- JavaScript中的apply和call
- javascript 中的this call apply
- Javascript中的apply、call、bind
- JavaScript中的call和apply
- Javascript中的apply、call、bind
- javascript中的this、apply、call
- JavaScript中的call及apply
- Javascript中的apply、call、bind
- 在页面上用action传递参数到后台乱码解决办法
- 做游戏开发必须会的抓包方法
- Json解析之Gson库
- C Primer Plus 第七章 学习总结——2015.4.21
- webService的客户端与服务端的编写
- JavaScript中的call、apply
- 运用El表达式截取字符串/获取list的长度
- 网络编程
- 8-4 RFID系统二进制树形搜索算法是如何解决碰撞的?简述其实现步骤
- 十字星递归算法
- #安卓杂记(七):自定义控件及属性获取
- Onvif修改设备属性
- 对汇编中无条件转移指令的认识
- java中的synchronized理解