目录
1.为什么要用构造函数创建对象?
因为我们使用字面量和使用new Object()创建对象时,一次只能创建一个对象。当我们需要创建多个相同对象时,只能进行复制,而且很多属性和方法都是相同的。现在我们可以利用函数的方法,把对象封装进函数,我们称这种函数为构造函数。
构造函数就是把对象里面相同的公共属性和方法抽象出来封装到函数里。
2.怎么样创建?
属性和方法前面一定要加this,创建的是哪个对象,this就指向哪个对象,这样创建多个对象时,指向不会乱。
//构造函数首字母大写
function Star(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
//不需要return
this.play=function(play){
console.log(play);
}
}
// new 构造函数名(); 调用函数 返回的是一个对象
var jinjing= new Star("金靖",18,"female");//Star {name: "金靖", age: 18, sex: "female"}
var xiaozhan= new Star("肖战",20,"male");//Star {name: "肖战", age: 20, sex: "male"}
jinjing.play("hahaha");
xiaozhan.play("hohoho");
console.log(typeof jinjing);//object
console.log(xiaozhan.age);//20
练习:利用构造函数创建两个英雄对象。函数中的公共部分包括:姓名属性(name),类型属性(type),血量属性(blood)和攻击方式(attack)。 英雄对象的信息如下 : 廉颇 坦克 500血量 攻击 :近战 后羿 射手 100血量 攻击: 远程
function hero(name, type, blood) {
this.name = name;
this.type = type;
this.blood = blood;
this.play= function(play) {
console.log(play);
}
}
var lianpo = new hero('廉颇', '坦克',500);
var houyi= new hero('后裔', '射手',100);
lianpo.play("近战");
houyi.play("远战");
执行结果:
3.构造函数与对象的区别?
构造函数:这里是明星。相当于java里的类(class),是泛指。
对象:这里是某个确定的明星(金靖),是对象实例化后的一个实例。指某一个具体的事物,是特指。
金靖== {name: "金靖", age: 18, sex: "female", sing: ƒ}
利用构造函数创建对象的过程就是对象的实例化。
//构造函数首字母大写
function Star(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
//不需要return
this.play=function(play){
console.log(play);
}
}
var jinjing= new Star("金靖",18,"female");//Star {name: "金靖", age: 18, sex: "female"}
var xiaozhan= new Star("肖战",20,"male");//Star {name: "肖战", age: 20, sex: "male"}