前几天学习了JS的闭包,当时为了更好地理解闭包也是专门深入学习了JS的构造函数的一些相关知识。
从形式上看,一个函数被作为构造函数还是普通函数执行的唯一区别,是否用new运算符。
通常来说,构造函数没有返回值,它们只是初始化this指针传递进来的对象,并且什么也不返回。如果一个函数有返回值,被返回的对象就成了new表达式的值。
如果一个函数的返回值是引用类型(数组,对象或者函数)的数据,那么这个函数作为构造函数用new运算符执行构造时,运算的结果将被它的返回值取代,这时候,构造函数体内的this值丢失了,取而代之的是被返回的对象。
1 | function foo(){ |
如果一个函数的返回值是一个值类型,那么这个函数作为构造函数用new运算符执行构造时,它的返回值将被丢弃。new 表达式的结果仍然是this所引用的对象。
1 | function fee(){ |