call和apply,函数伴侣_茜茜_前端开发者

Predefined:js中的this指向直接运行上下文。

Predefined:js中的this指向直接运行上下文。Predefined:js中的this指向直接运行上下文。

  call和apply是ECMASCRIPT 3在函数原型上所定义的方法,目的在于改变或指定this的指向,从而改变函数直接执行上下文。两者的不同之处在于传参,call接受多个参数,而apply接受数组。

  call和apply是ECMASCRIPT 3在函数原型上所定义的方法,目的在于改变或指定this的指向,从而改变函数直接执行上下文。两者的不同之处在于传参,call接受多个参数,而apply接受数组。

  1:隐藏的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);
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);

1var;
23function foo(){
4this.a)
5}
67//“hello”8// “hello”
// window.foo() == foo.call(window);

  默认的,我们认为:若函数以函数名+小括号方式执行,那么会调用原型中的call方法(此处只讨论call方法),动态的指定直接执行上下文.

  2:常用技巧:

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
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

function superType(name){
this name;
}
function SubType(name){
superType(name)
}
varnew);
console.log(instance.name);
//undefined;//lihua//在借用构造函数中function superType(name){
this name;
}
function SubType(name){
superType.call(
this,name)
}
varnew);
console.log(instance.name);
//lihua;//undefined

//使用apply改变传参方式

var countArr = [1,2,3,13,24,5,21];
Math.max(countArr);        //NaN(类型转换)
Math.max.apply(Math,countArr)         //24
//使用apply改变传参方式

var countArr = [1,2,3,13,24,5,21];
Math.max(countArr);        //NaN(类型转换)
Math.max.apply(Math,countArr)         //24

//使用apply改变传参方式var];
Math.max(countArr);
//NaN(类型转换)//24

 

 

 

 

 

 

 

» 本文来自:前端开发者 » 《call和apply,函数伴侣_茜茜_前端开发者》
» 本文链接地址:https://www.rokub.com/73255.html
» 您也可以订阅本站:https://www.rokub.com
赞(0)
64K

评论 抢沙发

评论前必须登录!