1. 函数的首字母书写方式不同
构造函数的首字母通常是大写的, 而普通函数首字母通常是小写; 这样就是为了区分构造函数和普通函数, 让程序员在调用构造函数的时候加上new关键字.
<script>
// 普通函数
function fn1() {
}
// 构造函数
let fn2 = new Person()
</script>
2. 函数的作用不同
构造函数的作用使用来创建实例对象的.
<script>
// 通过构造函数Array(), new调用创建实例对象arr
let arr = new Array()
console.log(arr instanceof Array);
console.log(Object.prototype.toString.call(arr));
</script>
3. 调用方式不同
普通函数直接调用, 而构造函数是用new来调用.
4. 函数内部this的指向也不同
1. 普通函数直接调用的话, 函数内部this的指向是window
2. 构造函数内部的this指向是new出来的实例对象
<script>
// 普通函数
function fn() {
console.log(this);
}
fn()
// 构造函数
function Person() {
console.log(this)
}
const p1 = new Person()
console.log(p1)
</script>
5. 默认返回值不同
1. 普通函数return出来的数据, 如果没有手动设置的话, 默认是一个undefined
2. 构造函数return出来的数据, 是一个对象 "[Object Object]"
<script>
// 普通函数
function fn() {
}
const res1 = fn()
console.log(res1) // 默认返回undefined
// 构造函数
function Person() {
}
const p1 = new Person() // 默认返回的是p1实例对象
console.log(p1)
</script>
6. 函数的执行过程不同
1.普通函数一般是按照顺序执行(异步代码除外)
2.构造函数会在内部自动生成一个对象, 改变this指向, 赋值, 最后就是return这个对象