在Mozilla的官网中对于call()的介绍是:
call() 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法.
fun.call(thisArg[, arg1[, arg2[, ...]]])
Call() 参数
thisArg
在fun函数运行时指定的this值。需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个html" target="_blank">函数处于非严格模式下,则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。
指定的参数列表。
Javascript中的call()方法
先不关注上面那些复杂的解释,一步步地开始这个过程。
Call()方法的实例
于是写了另外一个Hello,World:
function print(p1, p2) { console.log( p1 + ' ' + p2); } print("Hello", "World"); print.call(undefined, "Hello", "World");
接着,我们再来看另外一个例子。
var obj=function(){}; function print(p1, p2) { console.log( p1 + ' ' + p2); }print.call(obj, "Hello", "World");
只是在这里,我们传进去的还是一个undefined,因为上一个例子中的undefined是因为需要传进一个参数。这里并没有真正体现call的用法,看看一个更好的例子。
function print(name) { console.log( this.p1 + ' ' + this.p2); }var h={p1:"hello", p2:"world", print:print}; h.print("fd");
var h2={p1:"hello", p2:"world"}; print.call(h2, "nothing");
call就用就是借用别人的方法、对象来调用,就像调用自己的一样。在h.print,当将函数作为方法调用时,this将指向相关的对象。只是在这个例子中我们没有看明白,到底是h2调了print,还是print调用了h2。于是引用了Mozilla的例子
function Product(name, price) { this.name = name; this.price = price;if (price < 0) throw RangeError('Cannot create product "' + name + '" with a negative price'); return this; }
function Food(name, price) { Product.call(this, name, price); this.category = 'food'; } Food.prototype = new Product();
var cheese = new Food('feta', 5); console.log(cheese);
function print(name) { console.log( this.p1 + ' ' + this.p2); }var h2= function(no){ this.p1 = "hello"; this.p2 = "world"; print.call(this, "nothing"); }; h2();
这里的h2作为一个接收者来调用函数print。正如在Food例子中,在一个子构造函数中,你可以通过调用父构造函数的 call 方法来实现继承。
至于Call方法优点,在《Effective JavaScript》中有介绍。
1.使用call方法自定义接收者来调用函数。
2.使用call方法可以调用在给定的对象中不存在的方法。
3.使用call方法可以定义高阶函数允许使用者给回调函数指定接收者。
本文向大家介绍JavaScript中的call方法和apply方法使用对比,包括了JavaScript中的call方法和apply方法使用对比的使用技巧和注意事项,需要的朋友参考一下 方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 说明: call 方法可以用来代替另
本文向大家介绍javascript中call apply 与 bind方法详解,包括了javascript中call apply 与 bind方法详解的使用技巧和注意事项,需要的朋友参考一下 在JavaScript中,call、apply和bind是Function对象自带的三个方法,本文将通过几个场景的应用,来详细理解三个方法。 call() call() 方法在使用一个指定的this值和若干个
本文向大家介绍JavaScript中Math对象的方法介绍,包括了JavaScript中Math对象的方法介绍的使用技巧和注意事项,需要的朋友参考一下 1.比较最值方法 比较最值有两种方法,max() 和 min() 方法。 1.1 max() 方法,比较一组数值中的最大值,返回最大值。 1.2 min() 方法,比较一组数值中的最小值,返回最小值。 2.数值舍入方法 2.1 ceil() 方法,
本文向大家介绍彻底搞懂JavaScript中的apply和call方法(必看),包括了彻底搞懂JavaScript中的apply和call方法(必看)的使用技巧和注意事项,需要的朋友参考一下 call和apply都是为了改变某个函数运行的context上下文而存在的,即为了改变函数体内部this的指向。因为JavaScript的函数存在定义上下文和运行时上下文以及上下文是可以改变的概念。 回到目录
本文向大家介绍简介JavaScript中valueOf()方法的使用,包括了简介JavaScript中valueOf()方法的使用的使用技巧和注意事项,需要的朋友参考一下 JavaScript的Boolean.valueOf()方法返回指定 Boolean对象的原始值. 语法 boolean.valueOf() 下面是参数的详细信息: NA 返回值: 返回指定Boolean对象的原始值。
本文向大家介绍JavaScript中的toLocaleDateString()方法使用简介,包括了JavaScript中的toLocaleDateString()方法使用简介的使用技巧和注意事项,需要的朋友参考一下 JavaScript Date.toLocaleDateString()方法的日期转换为字符串,使用操作系统的语言环境的约定返回“日期”部分。 语法 下面是参数的详细信息: