原文链接:https://www.jianshu.com/p/95a5faee17f1
什么是构造函数
为啥要用构造函数
1.什么是构造函数
在 JavaScript 中,用 new 关键字来调用的函数,称为构造函数。
2.为啥要用构造函数
举个例子,我们要录入一年级一班中每一位同学的个人信息,那么我们可以创建一些对象,比如:
var p1 = { name: 'zs', age: 6, gender: '男', hobby: 'basketball' };
var p2 = { name: 'ls', age: 6, gender: '女', hobby: 'dancing' };
var p3 = { name: 'ww', age: 6, gender: '女', hobby: 'singing' };
var p4 = { name: 'zl', age: 6, gender: '男', hobby: 'football' };
// ...
对象的属性相同,就可以封装一个构造函数
function Person(name, gender, hobby, age) {
this.name = name;
this.gender = gender;
this.hobby = hobby;
this.age =age;
}
然后就可以通过new关键字调用
var p1 = new Person('zs', '男', 'basketball');
var p2 = new Person('ls', '女', 'dancing');
var p3 = new Person('ww', '女', 'singing');
var p4 = new Person('zl', '男', 'football');
// ...
在使用对象字面量创建一系列同一类型的对象时,这些对象可能具有一些相似的特征(属性)和行为(方法),此时会产生很多重复的代码,而使用构造函数就可以实现代码的复用。
注:对象字面量,就是创建对象的一种简单容易阅读的方法。如下:
var obj = {
a:'aaa',//a是属性,'aaa'是属性值
b:'bbb',
c:'ccc'
}
obj.a//"aaa"
obj['a']//"aaa"
js标准创建对象的方式要用new
var obj=new Object()
obj.a='aaa';
obj.b='bbb'
obj.c='ccc'
obj.c//"ccc"
obj['c']//"ccc"
3.构造函数执行过程
函数在创建的时候还不知道这是不是一个构造函数,在new关键字调用的时候才能确定这是一个构造函数。所以只关注new 关键字来调用的情况,按照上面的例子
(1)每当用new调用的时候会创建一个新的内存空间,标记为Person
(2)函数体内的this就指向该内存,因此给this添加属性就是给实例添加属性
(3)new调用的时候创建的内存被变量p1接受,所以p1也有改内存的属性
(4)返回值默认是this,如果手动添加一个基本数据类型的返回值,最终还是返回 this,手动添加一个复杂数据类型(对象)的返回值,最终返回该对象
function Person2() {
this.age = 28;
return 50;
}
var p2 = new Person2();
console.log(p2.age); // 28
function Person4() {
this.gender = '男';
return { gender: '中性' };
}
var p4 = new Person4();
console.log(p4.gender); // '中性'
网友评论