call和apply,函数伴侣
程序员文章站
2022-04-14 15:30:36
Predefined:js中的this指向直接运行上下文。 call和apply是ECMASCRIPT 3在函数原型上所定义的方法,目的在于改变或指定this的指向,从而改变函数直接执行上下文。两者的不同之处在于传参,call接受多个参数,而apply接受数组。 1:隐藏的call和apply: 默 ......
predefined:js中的this指向直接运行上下文。
call和apply是ecmascript 3在函数原型上所定义的方法,目的在于改变或指定this的指向,从而改变函数直接执行上下文。两者的不同之处在于传参,call接受多个参数,而apply接受数组。
1:隐藏的call和apply:
1 var a = "hello"; 2 3 function foo(){ 4 alert(this.a) 5 } 6 7 foo() ; //"hello" 8 foo.call(window); // "hello"
// window.foo() == foo.call(window);
默认的,我们认为:若函数以函数名+小括号方式执行,那么会调用原型中的call方法(此处只讨论call方法),动态的指定直接执行上下文.
2:常用技巧:
function supertype(name){ this.name = name; } function subtype(name){ supertype(name) } var instance = new subtype("lihua"); console.log(instance.name); //undefined; console.log(global.name); //lihua //在借用构造函数中 function supertype(name){ this.name = name; } function subtype(name){ supertype.call(this,name) } var instance = new subtype("lihua"); console.log(instance.name); //lihua; console.log(global.name); //undefined
//使用apply改变传参方式 var countarr = [1,2,3,13,24,5,21]; math.max(countarr); //nan(类型转换) math.max.apply(math,countarr) //24
上一篇: es6 Moduel 默认名与非默认名
下一篇: c/c++ 哈希表 hashtable
推荐阅读
-
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
-
JavaScript中的call和apply的用途以及区别
-
有关JavaScript中call()和apply() 的一些理解
-
call和apply的区别是什么(apply的用法和搭配)
-
js中call()和apply()改变指针问题的讲解
-
javascript中apply、call和bind的使用区别
-
python通过apply使用元祖和列表调用函数实例
-
Javascript函数内置方法call/apply实例讲解
-
javascript基于原型链的继承及call和apply函数用法分析
-
js中apply和Math.max()函数的问题及区别介绍