构造函数和普通函数执行区别

97 阅读1分钟
function Fn(x, y) {
	let sum = 10;

	this.total = x + y;
	this.say = function() {
		console.log(`我计算的和是:${ this.total }`);
	}
}

let res = Fn(10, 20); // 普通函数执行
let f1 = new Fn(10, 20); // 构造函数执行
let f2 = new Fn;

console.log(f1.sum);
console.log(f1.total);
console.log(f1.say === f2.say);

普通函数执行

let res = Fn(10, 20);

执行过程如下:

构造函数执行

let f1 = new Fn(10, 20);

执行过程如下:

可以看到他们的区别具体如下:

  1. 构造函数会在进栈后,先创建自己的实例对象。
  2. 初始化 this 的时候,指向创建的是实例对象。
  3. 如果构造函数没写 return 或者 返回一个原始类型的值,则默认把创建的实例对象返回;只有自己手动返回的是对戏,才以自己返回的值为主。

构造函数执行不带小括号

// new Fn; 其实也会把构造函数执行,其实这可以理解成跟普通函数执行的差异。
// 不过没传参数哦
let f2 = new Fn;

执行过程如下:

带参实例化和无参实例化的区别:

  1. 很明显,无参实例化的写法不能带参数
  2. 带参实例化的 new 操作符优先级为 20,无参为 19

你学废了么!