javascript函数的4种调用方法

javascript函数的4种调用方法
在Javascript中,函数是一等公民。功能的Javascript是一种数据类型,而不是像C #或其他描述性语言,作为一个模块的功能有四种模式:调用函数调用的形式,方法调用的形式,形式的构造,以及形式的运用。在这里所有的调用模式,主要的区别是关键词的含义,并分别介绍了以下形式。
本文的主要内容如下:

1。分析函数的四个调用形式
2。在函数中阐明这个含义。
三.处理对象的构建过程。
4。学习使用上下文调用函数

一、功能调用表单

函数调用的形式是最常见的形式,它是理解的最佳形式,所谓函数形式是在一般声明函数之后的直接调用:
复制代码代码如下所示:
声明一个函数,并调用
函数(){
警报(Hello World);
}
Func();
或:
复制代码代码如下所示:
使用lambda函数表达式,然后调用
函数(){()
警报(你好,程序员);
};
Func();
代码的两部分将在浏览器中弹出一个对话框,以显示字符串中的文本,这是一个函数调用。

可以发现函数调用非常简单,就像平常的学习一样。这里的关键是在函数调用模式中,这个函数中的关键字引用全局对象,如果它是浏览器中的窗口对象:
复制代码代码如下所示:
函数(){()
警戒(此);
};
Func();
此时,弹出对话框,并将{对象窗口}打印出来。

二、方法调用模式

函数调用模式非常简单,它是最基本的调用,但同样是一个函数,在赋值给对象的一个成员后,它是不同的:
复制代码代码如下所示:
定义一个函数
函数(){()
警报(我是函数);
};
将它分配给对象
var;
o.fn = / /功能;注意这里没有括号
调用
O.fn();
在这一点上,o.fn是一种方法,而不是一个功能。事实上,FN的方法是完全一样的功能,但这里有一个微妙的差异。看看下面的代码:
复制代码代码如下所示:
/ / java代码
警报(o.fn =功能);
打印结果是真的,这表明这两个函数是相同的,但是修改函数的代码:

修改函数体
函数(){()
警戒(此);
};
var;
o.fn =功能;
比较
警报(o.fn =功能);
调用
Func();
O.fn();
在这里,操作的结果是,这两个功能是一样的,所以打印的结果是真的。但由于两函数调用不同的函数,调用、打印{对象窗口},和o.fn的打印结果是{物}。

这里是电话和方法之间的差异的函数调用,这指的是全局对象的窗口,并在该法是指当前对象,即o.fn指客体。

三。构造函数的调用模式

相同的是一个函数,在简单函数模式中,这表示窗口;在对象方法模式中,这是指当前对象。除了这两种情况之外,Javascript中的函数也可以是构造函数。使用构造函数作为构造函数的语法是在函数调用中添加一个新关键字,如代码:
复制代码代码如下所示:
定义构造函数
var =函数(){()
this.name =程序员;
this.sayhello =函数(){
警报(你好,这里是+这个,名字);
};
};
调用构造函数来创建对象。
新的人();
使用对象
P.sayHello();
上述案例首先创建一个构造函数,然后使用构造函数来创建对象的体育新的语法是用在这里。然后sayHello()方法被利用的对象,这是简单的使用构造函数创建对象。正如你可以看到的情况下,这指的是对象在那个时候,除了上面的简单使用,有几个变化的函数的构造函数,分别:

1。对象需要使用的所有属性都必须由;

2,函数的返回语句的意义被重写,如果返回非对象,则返回该对象。

构造函数中的这个

我们需要分析创建对象的过程,以便我们能够知道这一点的含义:
复制代码代码如下所示:
var =函数(){()
this.name =程序员;
};
新的人();
在这里,我们首先定义功能人,然后分析整个执行

1,程序在执行此语句时不执行函数体,因此Javascript解释器不知道函数的内容。

2。接着,执行新关键字,创建对象,解释器打开内存,获取对象的引用,并将新对象的引用提供给函数。

3,在执行函数旁边,引用对象引用是给这个的,换句话说,在构造方法中,这是新创建的对象。

4,然后添加一个成员到这个,这是向对象添加一个成员。

5,最后的函数结束,返回这个,并将这个传递给左边的变量。

在分析构造函数的执行后,您可以得到构造函数中的这个是当前对象。

构造函数中的返回

在构造函数中,返回的含义发生变化,首先,如果在构造函数中,如果返回是一个对象,那么保留原来的意义。如果返回一个非对象,如数字、布尔和字符串,则返回到这个对象。如果没有返回语句,它也返回到。
复制代码代码如下所示:
返回一个返回对象
var =函数(){()
this.name =赵小虎;
返回{
姓名:公牛明亮
};
};
创建对象
新的CTR();
访问名称属性
警报(器);
代码的执行,这里打印的结果是牛亮亮。由于施工方法返回一个对象,然后返回的意义是保留的,内容是返回后返回的对象,和下面的代码读取:
复制代码代码如下所示:
返回定义的非对象数据构造函数。
var =函数(){()
this.name =赵小虎;
返回公牛光明;
};
创建对象
新的CTR();
使用
警报(P);
警报(器);
代码的结果是第一个弹出打印{对象},然后打印赵晓虎,因为这个回报是一个字符串,属于基本类型,然后返回语句是无效的,这是回报,所以第一次打印是{对象}和第二不会打印定义。

四,应用调用模式

除了上述三种调用模式,函数还用作对象,应用方法和调用方法可以使用。这是第四种呼叫模式。我称之为应用模式。

首先,我们介绍了应用模式。首先,应用模式可以像函数一样使用,也可以使用类似的方法,所以可以说是一种灵活的使用方式;

这里的语法很模糊,这个例子用来解释它。

1、构建了两个新的JS文件,这是js1.js和js2.js分别。

2。添加代码
复制代码代码如下所示:
/ / js1.js文件
func1函数(){ var =()
this.name =程序员;
};
func1.apply(空);
警报(名称);

/ / js2.js文件
VaR func2 =函数(){()
this.name =程序员;
};
var;
func2.apply(O);
警报(o.name);

3,它可以在两个代码中找到,第一个文件中的name属性被加载到窗口中的全局对象中;name属性在传入对象中的第二个文件在O中,这相当于第一个函数调用,相当于第二个方法调用。

这里的参数是方法本身的参数,但它需要以数组的形式存储,如代码:
复制代码代码如下所示:
一个示例数组
VaR arr1 = { 1,2,3,{ } { } } 4、5、6、7、8;

VaR arr2 = arr1.conact.apply({ },arr1);
然后调用模式,调用模式和应用模式之间最大的区别是调用中的参数不是数组,下面的代码是清晰的:

定义方法
函数(名称,年龄,性别){
this.name =名称;
this.age =年龄;
this.sex =性;
};
创建对象
var;
将成员添加到对象中
应用模式
VaR P1 = func.apply(O,{赵小虎
调用模式
VaR P2 = func.call(O,赵小虎

上面的代码,应用模式与调用模式的结果相同。

事实上,使用应用模式和调用模式,可以任意控制这一意义,并广泛地应用于函数js的设计模式中,简单地总结了JS调用函数的方式,即函数、方法、构造函数和应用四种模式。而这些模型的意义,分别在函数中,这是一个全局对象窗口中的方法,这是指当前对象,这是构造函数中创建的对象,在应用模式下可以指定,在应用模式下,如果使用null,它是函数模式,如果使用对象,则是方法模式。

五。一个完整的例子

让我们以一个例子结束这篇文章。案例显示:有一个div,id是DV,鼠标移动到顶端增加2倍,鼠标离开恢复,下面的JS代码直接:
复制代码代码如下所示:
VaR DV = document.getelementbyid(DV);
VaR高度= parseInt(dv.style.height | | DV。offsetheight);
无功intervalid;
dv.onmouseover =函数(){
动画的实现中已经停止。
ClearInterval(intervalid);
获取目标高度
VaR随身高成正=高度* 2;
获取当前对象
var =;
打开计时器,缓慢更改
intervalid = setInterval(){()函数(
高度现在
VaR高度= parseInt(dv.style.height | | DV。offsetheight);
每次需要更改步骤/记录时
var H = math.ceil(Math.abs(高度随身高成正) / 10);
如果法官更改,步骤0将停止计时器。
如果(h = 0){
为什么用这个想想
that.style.height =(身高+ H)+PX;
{人}
ClearInterval(intervalid);
}
},20);
};
dv.onmouseout =函数(){
原则与以前一样。
ClearInterval(intervalid);
VaR随身高成正=高度;
var =;
intervalid = setInterval(){()函数(
VaR高度= parseInt(dv.style.height | | DV。offsetheight);
var H = math.ceil(Math.abs(高度随身高成正) / 10);
如果(h = 0){
that.style.height =(高H)+PX;
{人}
ClearInterval(intervalid);
}
},20);
};
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部