本篇文章介绍构造函数需要注意的问题事项,
1、在自定义构造函数中首字母需要大写。
2、构造函数不写return
首先返回一个基本数据类型
打印结果没有返回。我们如果写返回一个数字,打印结果也是没有的。
但是如果我们在构造函数中,写返回一个对象,那么打印结果将会变化,代码块如下所示:
如果在构造函数中写了返回一个对象,那么我们的构造函数将失去意义了,也就没有了实例化对象的意义了。
总结,在构造函数中,如果写return,返回一个基本数据类型是没有任何反应的,但是如果返回一个复杂数据类型,那么结果就会变化了,那么就不会与之前的构造函数有关系了。
3、构造函数能当做普通函数使用吗?
我们先调用构造函数,不实例化对象,打印结果是undefined,代码块如下图所示:
为什么打印结果的undefined?原因是,上面的构造函数就是一个普通函数,且没有返回值,打印结果当然是undefined了。
当然了,细心的小伙伴可能会问了,既然是普通函数,那么普通函数中的this又是指向谁的呢?
在上述代码中,一个普通函数被调用了,就相当于将这个函数挂载到window这个大对象当中,所以上面代码中的this是指向window的。代码演示如下图所示:
打印结果如下所示:
上面代码之所有打印为张三,应为上面我们已经说过一个普通函数被调用了,就相当于将这个函数挂载到window这个大对象当中,也就是说window中有了name这个属性。
4、面向对象中的this是指向谁的呢?
上面的代码铺垫是告诉读者们,构造函数是可以当做一个普通函数去试用的,但是在构造函数中添加了this关键字,那么一定是想通过实例化new对象形式去试用的。代码演示如下所示:
展开打印结果就是实例化的对象。
在实例化new的过程中,会在内存中的堆区生成一个实例化对象(复杂类型在堆区中开辟空间来创建实例对象的),所以构造函数中this的指向就是指向实例化的这个对象。而实例化对象中同样也有name属性。 (只要构造函数中写了什么属性方法,那么实例化的对象中都会有这些属性和方法)