构造函数
什么是对象
笔者的理解:具有特定的属性与方法的封装集合.
面向对象的优势:
- 暴露在全局中的只有一个对象名,不会造成全局变量污染
- 是用对象将代码进行功能模块化的划分,有利于日后的维护
创建对象的方法:
- 对象字面量法(key:value,key:value...)
var zzw = {
name: "zzw",
age: "20",
major: "tourism"
};
缺点:冗余度过高,若需要创建属性一致的对象需要不断写对象字面量,不断重复
工厂函数法(利用对象的动态特性)
function createObj(name, age, major) {
var obj = {};
obj.name = name;
obj.age = age;
obj.major = major;
return obj;
}
var xzq = createObj("xzq", "111", "111");
var xzq = createObj("zjl", "222", "222");
缺点:通过工厂函数创建的对象之间并无关联性
自定义构造函数
构造函数其实也是函数,只不过是用来初始化对象的,与 new 同时使用.
new 是用来创建对象的.
构造函数是用来初始化对象的.
构造函数名首字母大写,以示区分.
function Person(name, job) {
// 默认隐含的操作,将new创建的对象赋值给this
this.name = name;
this.job = job;
this.sayHello = function() {
console.log("hello");
};
}
var winter = new Person("winter", "coding");
构造函数的执行过程:
- 使用 new 关键字创建对象;
- 调用构造函数,将新创建出来的对象赋值给对象函数内部的 this;
- 在构造函数内部使用 this 为新创建的对象新增成员;
- 默认返回新创建的对象,普通函数如果不写返回语句,会返回 undefined.
构造函数的返回值:
- 默认返回的时新创建的对象;
- 如果我们在构造函数中手动 return 基本类型的值或 null,则不会影响构造函数默认的返回值;
- 若手动 return 的是对象类型,则会返回这个对象.
若像调用普通函数那样调用构造函数,而没有使用 new 关键字,则没有创建对象,构造函数中 this 指向 window.切记,这是一种错误的使用方式.
如果构造函数没有参数,那么调用的时候小括号可以省略,最好不要.