首页 > 怎样理解javascript中的function类型?

怎样理解javascript中的function类型?

var a = function(){};
typeof a;

rt


起个头,具体的啃下书本~

1.JS中函数是对象,其可以像普通对象一样,设置属性、方法
2.JS中类型系统基于原型对象设计的,也就是每一个对象都有原型,包括函数对象也是
3.函数作为构造函数使用new 操作就可以创建一个实例对象,可以通过

A.prototype.myMehtod=function(){

}

方式为原型添加方法,实例对象都可以使用这个方法
4.也可以覆盖prototype属性,指向一个新的原型对象

A.prototype=new B();

函数在javascript是【一等公民】(有些小伙伴也称作基本类型)

typeof 的返回值就是这些【一等公民】的种类(number、boolean、function、string、object、undefined),大概可以这样理解吧。

而确实,所有这些【一等公民】其实都是基于Object的,typeof返回的"object"指的是那些非基本(非一等公民)的对象,尤其值得注意的是Array并不是【一等公民】。

有时候我们强调函数是对象,但是我们没有意识到其实number和boolean也是对象(javascript有多灵活),因此泛泛而谈【函数是一种对象】这个概念,给函数添加各种各样的属性方法,我个人认为这样是不太严谨的,函数确实是对象的衍生品之一,但是也要认识到函数的特殊性,这样才能更好的使用函数。


你们可能有点误解我的意思了,
我想知道的是,为啥 typeof一个function 要返回 function ,表达能力有限,最近在总结下,各位大神别介意


在JS中,函数也是一种对象。本来

typeof function

应该跟其他对象那样返回"object"的。然而function是一种极其特殊和极其重要的对象。如果说通常的对象是名词,那么函数对象就是动词

所以我们经常需要将函数对象和其他对象区分开,所以JS引擎在对函数使用typeof时给我们返回一个特殊的"function"来让我们可以区分。

一句话总结,就是因为函数特殊啊。

如果你一定要追根溯源,那么请看这里的表格:ES规范11.4.3节


typeof是告诉你当前变量类型。你typeof函数当然是function,typeof字符串就是string,其他以此类推。况且函数虽然也有对象的功能,但只限于他的原型是object,你直接对函数typeof是不会判断出是object的


请看《javascript高级程序设计》前五章,里面有你要的对js中的类型系统的理解。

【热门文章】
【热门文章】