VueBloghyhero6

JS 函数与函数对象

2019-07-07 / 2019-07-14 / 168次浏览

在JS 中作为引用类型的函数,function, 那么它与引用类型的函数区别,是什么?

关注JS 可能听说过万物皆对象的这么一个说法,在JS中万物皆对象,函数也是一种对象,只不过它是一种特殊对象。比如其最重要的:prototype 属性,这个属性是JavaScript用来构造原型链引入的。Funtion是所有函数对象的基础,而Object则是所有对象(包括函数对象)的基础,在JavaScript 中,任何一个对象都是Object。

typeof (function)
typeof (new function)
typeof (Array)
typeof (Object)

上述四种返回的皆是 'function'

typeof(new Array())
typeof(new Date())
typeof(new Object())

这三条语句显示的'Object'
即使函数本身也是一个对象,他们的类型是function,function类型的作用所在,那就是给函数对象本身定义一些属性和方法,借助于函数protype对象,可以很方便地修改和扩充Funtion类型的定义,但是有一点要注意,在真实的代码开发当中我们并不会去使用这种类似的扩展。
下面上代码
Function.prototype.method1=function(){
alert("function");
}
function func1(a, b, c){
return a+b+c
}
func1.method1();
func1.method1.method1();

注意 我们为了Function 扩展了 method1 的方法,当我们在定义一个函数 func1.

func1 是可以调用到 method1 的方法的,
同样的 func1.method1 也是一个方法,它依旧可以访问到 method 方法。
所有 对 function 方法的扩充都具备这样的递归性质。

能够证明函数也是对象一个强有力的证据就是,
可以修改Object 这个类型来让所有对象具有一些通用的属性和方法,修改Object类型是通过prototype来完成的。

Object.prototype.getType=function(){
return typeof(this);
}
var array1=new Array();
function func1(a,b){
return a+b;
}
alert(array1.getType());
alert(func1.getType());

在上述代码中,我们为所有的对象添加了getType方法,作用是返回对象的类型。俩条alert 语句分别会显示"object"和"function"

可以看到 给Object 对象做了属性扩展,函数function 确能够对属性进行调用。这个就可以证明函数是一种特殊的对象。