天蓬老师2017-04-10 16:57:53
你们可能有点误解我的意思了,
我想知道的是,为啥 typeof一个function 要返回 function ,表达能力有限,最近在总结下,各位大神别介意
黄舟2017-04-10 16:57:53
起个头,具体的啃下书本~
1.JS中函数是对象,其可以像普通对象一样,设置属性、方法
2.JS中类型系统基于原型对象设计的,也就是每一个对象都有原型,包括函数对象也是
3.函数作为构造函数使用new 操作就可以创建一个实例对象,可以通过
A.prototype.myMehtod=function(){
}
方式为原型添加方法,实例对象都可以使用这个方法
4.也可以覆盖prototype属性,指向一个新的原型对象
A.prototype=new B();
ringa_lee2017-04-10 16:57:53
在JS中,函数也是一种对象。本来
typeof function
应该跟其他对象那样返回"object"
的。然而function是一种极其特殊和极其重要的对象。如果说通常的对象是名词,那么函数对象就是动词。
所以我们经常需要将函数对象和其他对象区分开,所以JS引擎在对函数使用typeof
时给我们返回一个特殊的"function"
来让我们可以区分。
一句话总结,就是因为函数特殊啊。
如果你一定要追根溯源,那么请看这里的表格:ES规范11.4.3节
PHPz2017-04-10 16:57:53
函数在javascript是【一等公民】(有些小伙伴也称作基本类型)
typeof 的返回值就是这些【一等公民】的种类(number、boolean、function、string、object、undefined),大概可以这样理解吧。
而确实,所有这些【一等公民】其实都是基于Object的,typeof返回的"object"指的是那些非基本(非一等公民)的对象,尤其值得注意的是Array并不是【一等公民】。
有时候我们强调函数是对象,但是我们没有意识到其实number和boolean也是对象(javascript有多灵活),因此泛泛而谈【函数是一种对象】这个概念,给函数添加各种各样的属性和方法,我个人认为这样是不太严谨的,函数确实是对象的衍生品之一,但是也要认识到函数的特殊性,这样才能更好的使用函数。
“函数是一等公民”背后的含义
高洛峰2017-04-10 16:57:53
typeof是告诉你当前变量类型。你typeof函数当然是function,typeof字符串就是string,其他以此类推。况且函数虽然也有对象的功能,但只限于他的原型是object,你直接对函数typeof是不会判断出是object的