什么是构造函数
1.在 JavaScript 中,用 new 关键字来调用的函数,称为构造函数。
2.构造函数首字母大写(规范),通过new创建的是引用类型
为什么要是用构造函数
1.在使用对象字面量创建一系列同一类型的对象时,这些对象可能具有一些相似的特征(属性)和行为(方法),此时会产生很多重复的代码,而使用构造函数就可以实现代码的复用。
构造函数的执行过程
a、当以 new 关键字调用时,会创建一个新的内存空间,标记为 一个的实例
b、 函数体内部的 this 指向该内存
c、执行函数体内的代码
d、默认返回 this 。
若是有return,return后面是对象(或数组),则最终会返回这个对象,只有是对象有效,若不是还是返回new过程中形成的对象
ES6中class与构造函数的关系
class 为 构造函数的语法糖,即 class 的本质是 构造函数。class的继承 extends 本质 为构造函数的原型链的继承。
例如:
类的写法
class Person { //定义一个名字为Person的类
constructor(name, age) { //constructor是一个构造方法,用来接收参数
this.name = name; //this代表实例对象
this.age = age;
}
say() { //这是一个类的方法,注意千万不要加上function
return this.name + this.age
}
}
var obj = new Person('老铁', 18);
console.log(obj.say());
构造函数的写法
function Person(name, age) { //构造函数和实例化构造名相同且大写(非强制,但这么写有助于区分构造函数和普通函数)
if (!(this instanceof Person)) { //避免使用者不小心讲Person当作普通函数执行
throw new Error("请使用 new Person"); //仿ES6 class 中的写法
}
this.name = name;
this.age = age;
}
Person.prototype.say = function () {
return this.name + this.age
}
var obj = new Person('老铁',18); //通过构造函数创建对象,必须使用new运算符
console.log(obj.say());
总结:通过class定义的类 和通过构造函数定义的类 二者本质相同。并且在js执行时,会将第一种转会为第二种执行。所以 ES6 class的写法实质就是构造函数。
参考链接:参考链接
参考链接