1.引言
在javascript中函数对象是一个非常特殊的对象,在js中函数的使用也是相当的频繁,所以了解函数的一些用法也是非常有必要的,在本篇博客中就先介绍一下函数的几种用法。
2.函数的使用
2.1 函数的正常使用
- 代码
var b=function()
{
alert(1);
}
//或者
function b()
{
alert(1);
}
//调用时
b();
- 上面这种函数的使用方式,是最常见的。先定义一个函数,然后调用
2.2将函数当作类来使用
- 代码
function MyClass()
{
//此处写代码
};
var a=new MyClass();//函数的第二种调用方式
- 此处是将函数当作类来使用
2.3将函数当作方法来使用(类无返回值)
- 代码
function MyClass()
{
this._show=function(){
alert("1")
}
};
var a=new MyClass();
a._show();
a.show()
是将show当作类中的一个方法使用,此处注意函数与方法的区别,注意类MyClass是没有返回值的,缺点:假设_show是私有方法,外界还是可以被访问到
2.4将函数当作方法来使用(类有返回值)
function MyClass()
{
this._show=function(){
alert("1")
};
return {
show:this._show
}
};
var a=new MyClass();
a.show();
- 类有返回值和没有返回值的区别在于:将this._show()私有化了,然后暴露了一个访问接口show()方法。
3.this关键字
在js中this的使用相当灵活(在使用this的时候一定要慎用),总的来说:this指的是调用函数的那个对象。比如:
var c=10;
function MyClass()
{
this.c=5
this.show=function(){
alert(this.c);
}
};
var a=new MyClass();
a.show();//弹出5
- 函数被调用时是被a调用的,所以show中的this也就是MyClass的实例,所以弹出5。
然后我们看第二个实例
var c=10;
function MyClass()
{
this.c=5;
this.show=function(){
alert(this.c)
};
};
var a=new MyClass();
var b=a.show;
b();//弹出10
- 注意:当b调用的时候,是在window环境下调用的,所以当调用b(也就是调用show函数),此时this代表window,所以弹出的是10.
4.函数的最后一种调用方式
在上面我们可以看到this是非常灵活的,或许在不经意的时候,this的指向就改变了,这对于程序来说是非常危险的,函数的最后一种调用方式,便是控制this的指向,我们通过apply,或者call来调用函数
var c=10;
function MyClass()
{
this.c=5;
this.show=function(){
alert(this.c)
};
};
var a=new MyClass();
var b=a.show;
b.call(a);//弹出5
b.apply(a);//弹出5
- 上面利用call或者apply控制函数b调用时,函数内部的this环境为a,所以弹出为5.