源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

浅谈函数调用的不同方式,以及this的指向

  • 时间:2022-10-09 20:12 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:浅谈函数调用的不同方式,以及this的指向
[b]一、函数的调用方式[/b] 1.作为函数,一种直接易懂的方式(即函数调用模式)。 2.作为方法,方法是连接在对象上的,被这个对象调用,这种形式就是面向对象编程。 3.作为构造器,在构造的过程中一个新的对象被创建出来。 4.经由函数的apply或者call方法。 [b]二、函数参数[/b] [b]1.传入参数[/b] (1)传入变量多于函数定义变量。 (2)函数定义变量多余传入变量,多出来的变量是undefined [b]2.函数在被调用的时候,隐形的传入两个参数argument和this(即argument和this被悄悄传入函数,作用在函数的作用域中)。[/b] (1)argument:函数调用时传入函数的变量集合(有arguemnt.length属性) eg:argument[0]指的是传入函数的第一个参数 (2)this关联一个对象。 根据调用方式的不同,this的指向也不同。因此this为调用的上下文(invocation context)。 [b]三、this的指向[/b] [b]1.函数调用模式 (this->window)[/b] 这个函数并不属于任何对象的属性。
function fn1(){
 //some code
}
fn1();
或着:
var fn2=function(){
 //some code
}
fn2();
使用这种方式调用函数,函数的上下文是全局上下文(global context即window)。this->window。
[b]2.方法调用模式   (this->方法所属的对象)[/b] 这个函数是一个对象的属性,当这个函数被调用时,这个函数被视为这个对象的一个方法。
var obj={
 //some code;
};
obj.getname=function(){
 //some name
}
obj.getname();
函数的上下文是这个对象(例子中的 obj)。this->obj
[b]3.构造器调用模式 (this->创建的新对象)[/b] 函数被作为构造器调用时有以下特点: 一个新的对象被创建出来; 这个新的对象被传递给这个构造器作为this参数,也就是说这个新的对象是构造器函数的上下文; 如果没有显性的return语句,这个新的对象会被隐式的return(就是悄咪咪的被return了),并成为这个构造器的值。
function Fn(){
 this.a=function(){
   return this;
 }
}
var n=new Fn();
console.log(n.a());//Fn{a:f}
console.log(n);//fn{a:f}
//此例中,构造了一个构造函数Fn((),利用new关键字调用时一个空的对象被创建出来,并传递到函数中作为this存在。this-Fn(新的)
//这个构造器同时创建了a属性,并将此属性作为一个方法赋予给它创建出新对象的实例。
[b]4.apply()获得call()方法  (this->可以是我们指定的任何对象)[/b] (1)apply(),两个参数。第一个参数:用于作为函数上下文的对象。第二个参数:一个参数数组。 (2)call(),两个参数。第一个参数:用于作为函数上下文的对象。第二个参数:argument list。 call()和apply()多用于函数回调。
function circle(list,calback){
 for(var i=0;i<list.length;i++){
   calback.call(list[i],i);
 }
}
var list=['a','b','c'];
circle(list,function(index){
 console.log(index);//0,1,2(即传进来的i值)
 console.log(this);//a,b,c(call的第一个参数)
});
//this->call()传递进来的第一个参数。
以上这篇浅谈函数调用的不同方式,以及this的指向就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部