function是什么意思

更新时间:2022-11-24 17:26:41 阅读: 评论:0


2022年11月24日发(作者:法国工程师大学)

javascript中的lf和this⽤法⼩结

那天⽤到于是打开看看,才看⼏⾏就满头雾⽔,原因是对js的⾯向对象不是很熟悉,于是百度+google了⼀把,最

后终于算⼩有收获,写此纪念⼀下^_^。

代码⽚段

代码如下:

varClass={

create:function(){

returnfunction(){

(this,arguments);

}

}

}

//Class使⽤⽅法如下

varA=();

ype={

initialize:function(v){

=v;

}

showValue:function(){

alert();

}

}

vara=newA(‘helloWord!');

lue();//弹出对话框helloWord!

linitialize是什么?

lapply⽅法是⼲什么的?

larguments变量呢?

l为什么newA后就会执⾏initialize⽅法?

寻找答案:

initialize是什么?

只不过是个变量,代表⼀个⽅法,⽤途是类的构造函数。

其具体功能靠js的⾯向对象⽀持,那么js的⾯向对象是什么样⼦的那?和java的有什么相同与不同?

看代码:

代码如下:

复制代码代码如下:

varClassName=function(v){

=v;

ue=function(){

;

}

ue=function(v){

=v;

}

}

那么JS中的函数和类有什么不同呢?

其实是⼀样的,ClassName就是⼀个函数,当出现在new后⾯的时候就作为⼀个构造函数来构造对象。

代码如下:

varobjectName1=newClassName(“a”);//得到⼀个对象

其中objectName1就是执⾏ClassName构造函数后得到的对象,⽽在ClassName函数中的this指的就是new之后构造出来的对

象,所以objectName1会后⼀个属性和两个⽅法。可以通过这样来调⽤他们:

代码如下:

ue(''hello'');

alert(ue());//对话框hello

alert();//对话框hello

那么

代码如下:

varobjectName2=ClassName(“b”);//得到⼀个对象

这样objectName2得到的是什么呢?显然是⽅法的返回值,这⾥ClassName只作为了⼀个普通的函数(虽然⾸字母⼤写

了)。但是在之前写的ClassName中并没有返回值,所以objectName2会是undifinded那么“b”赋给谁了呢?在这并没有产⽣

⼀个对象,⽽只是单纯的执⾏这个⽅法,所以这个“b”赋值给了调⽤这个⽅法的对象window,证据如下:

varobjectName2=ClassName(“b”);//得到⼀个对象

alert();//对话框b

所以JS中的所有function都是⼀样的,但是⽤途可能是不同的(⽤作构造对象抑或是执⾏⼀个过程)。

下⾯该回到主题了initialize是⼲什么的?

代码如下:

复制代码代码如下:

varClass={

create:function(){

returnfunction(){

(this,arguments);

}

}

}

varA=();

这段代码是构造个⼀个function复制给A,这个function是

代码如下:

复制代码代码如下:

function(){

(this,arguments);

}

并且后⾯这个⽅法是⽤来做构造函数的。当使⽤这个构造函数来构造对象的时候,会让构造出来的这个对象的initialize变量执

⾏apply()⽅法,apply()的⽤途后⾯在说,继续说initialize。这样在初始化对象的时候会联系到initialize(怎么联系就要看apply

的了)。

那么

代码如下:

复制代码代码如下:

ype={

initialize:function(v){

=v;

}

showValue:function(){

alert();

}

}

是什么意思呢?

Prototype是“原型”的意思。A是⼀个function(),那么ype,就是function中的⼀个变量,其实是个对象。这个对象拥

有什么⽅法,那么function产⽣的对象就拥有什么⽅法,故

vara=newA(‘helloWord!');

lue();//弹出对话框helloWord!

所以a对象也会有initialize⽅法,不只如此,每⼀个有A构造出来的对象都会有⼀个initialize⽅法,⽽在前⾯说过,构造的时候

会调⽤构造函数,构造函数⾥⾯会让initialize去调⽤apply⽅法,于是在newA(‘helloWord!')的时候initialize回去调⽤apply⽅

法。这也就是调⽤了⼀个初始化的⽅法。

下⾯开始研究apply(),在⽹上找了⼏个资料,并结合⾃⼰的研究,了解了call()和apply()的功能。功能基本⼀

样,function().call(object,{},{}……)或者function().apply(object,[……])的功能就是对象object调⽤这⾥的funciton(),不同之处是

call参数从第⼆个开始都是传递给funciton的,可以依次罗列⽤“,”隔开。⽽apply只有两个参数,第⼆个是⼀个数组,其中存

储了所有传递给function的参数。

(this,arguments);

是什么意思?

这⾥的第⼀个this,是指⽤new调⽤构造函数之后⽣成的对象,也就是前⾯的a,那么第⼆个this也当然应该是指同⼀个对象。

那这句话就是this(也就是a)调⽤initialize⽅法,参数是arguments对象(参数的数组对象),所以在构造函数执⾏的时候,

对象a就会去执⾏initialize⽅法来初始化,这样就和单词“initialize”的意思对上了。

那么执⾏initialize⽅法的参数怎么传递进去的呢?

这段代码能说明⼀切了:

代码如下:

复制代码代码如下:

functiontest(){

alert(typeofarguments);

for(vari=0;i<;i++){

alert(arguments[i]);

}

}

test("1","2","3");

test("a","b");

执⾏后alert(typeofarguments);会显⽰object,说明arguments是对象。然后会依次打出1、2、3。说明arguments就是调⽤函

数的实参数组。

代码如下:

复制代码代码如下:

varClass={

create:function(){

returnfunction(){

(this,arguments);

}

}

}

arguments就是create返回的构造函数的实参数组,那么在

vara=newA(‘helloWord!');

的时候‘helloWord!'就是实参数组(虽然只有⼀个字符串),传递给⽅法apply,然后在调⽤initialize的时候作为参数传递给初

始化函数initialize。

本文发布于:2022-11-24 17:26:41,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/13222.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:mentioned
下一篇:英汉翻译在线
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图