面向对象/自定义构造函数创建对象
自定义构造函数创建对象
基本写法
function 构造函数名(参数1,参数2,参数3...) {
//设置对象的属性
this.属性01 = 参数1;
this.属性02 = 参数2;
//设置对象的方法
this.方法01 = function () {
//.....
};
this.方法02 = function () {
//.....
}
}
//自定义构造函数方式创建对象
var 对象01 = new 构造函数名(实参01,实参02,实参03...);
var 对象02 = new 构造函数名(实参01,实参02,实参03...);
代码示例
function CreateBook (name,price,author,press) {
this.name = name;
this.price = price;
this.author = author;
this.press = press;
this.read = function () {
console.log("我的书名为:"+this.name+",作者为"+this.author+"....");
};
}
var b1 = new CreateBook("声名狼藉者的的生活","42.00","福柯","北京大学出版社");
var b2 = new CreateBook("人性的枷锁","49.00","毛姆","华东师范大学出版社");
var b3 = new CreateBook("悟空传","28.00","今何在","湖南文艺出版社");
//打印对象的属性,并调用对象的方法测试
console.log(b1.author);
console.log(b2.author);
console.log(b3.author);
b1.read();
b2.read();
b3.read();
构造函数与new关键字
构造函数和普通函数的区别:函数的首字母大写
构造函数的作用:用于完成对象的初始化
new关键字的作用:用于创建对象(Object类型)
自定义构造函数和简单工厂函数的对比
① 函数的首字母大写(用于区别构造函数和普通函数)
② 创建对象的过程是由new关键字实现
③ 在构造函数内部会自动的创建新对象,并赋值给this指针
④ 自动返回创建出来的对象
构造函数的执行过程
① 使用new关键字创建对象
② 把新创建出来的对象赋值给this
③ 在构造函数内部,使用this为新创建出来的对象设置属性和方法
④ 默认返回新创建的对象(普通函数如果不显示的return则默认返回undefined)。
构造函数的返回值
01 如果在构造函数中没有显示的return,则默认返回的是新创建出来的对象
02 如果在构造函数中显示的return,则依照具体的情况处理
[01] return 的是对象,则直接返回该对象,取而代之本该默认返回的新对象
[02] return 的是null或基本数据类型值,则返回新创建的对象
构造函数方式创建对象存在的问题
每次创建对象,都会重新创建函数,那么如果创建的对象数量很多,而对象方法内部的实现一模一样,则造成了资源浪费