构造函数和普通函数

在JavaScript的学习中,函数是非常重要的内容,函数本身实际上呢也是一个对象,每个函数都是Function对象的实例,既然函数也是对象,那么函数就用自己的属性和方法,这个我们不深究,留给后续讨论。
这一篇笔记的主要内容是分清构造函数和普通函数,普通函数大家都知道,天天都在用,参数啦,返回值啦都清楚地不得了,对构造函数的概念可能就不那么清晰了。
实际上,构造函数和普通函数一样,都是函数,如果你对一个函数使用了new,那么我们称其为构造函数,否则呢就是普通函数。我们来分析一下new一个函数的时候发生了什么呢?
我们照例来个例子:

我们声明了一个函数Person,你可能不知道的是,在你申明的时候实际上已经使用到了new,不相信?多的是,你不知道的事,实际上上面声明函数等同于如下方式声明函数:

因为Function是javascript已经定好的内置对象,当你使用new Function时javascript会自动的跟你在堆中生成一个函数对象,之后Person1指针指向他,但是当你new Person()的时候,这属于是你的自定义对象,在JavaScript中自定义对象的类型是Object,注意区分这两者的本质区别。
接着我们看以下几种操作:

第一种就是上述,不重复解释。结果是:
第二种直接执行Person而不是new Person,这两者的区别是前者是在当前栈中通过指针Person调用了堆中已生成的Funtion对象,之后用 (实参1,实参2,实参3)的方法让这个Function对象执行了其内部的语句并把返回值赋值给变量yuhuan(这里没有给返回值所以是undefined),但是这个时候全局对象global是有变化的,请看结果:
第三种和第二种意义相似。
第四种,会在堆内存中创建一个Object对象但无任何指针指向他,该对象会在垃圾回收的时候销毁。

posted @ 2015-07-10 09:50  卡布kaka  阅读(148)  评论(0)    收藏  举报