1.构造函数
构造函数是用来创建多个属性名相同但属性值不同的对象。
构造函数特点: 1.函数体内使用this关键字,代表了所要生成的对象实例。 2.生成对象,必须使用new 关键字实例化。
构造函数首字母一般要大写,用来与普通函数区分。
function createPerson(name, age, sex) {
this.name = name
this.age = age
this.sex = sex
}
let p1 = new createPerson('张三', 20, '男')
let p2 = new createPerson('李四', 30, '男')
2.使用构造函数的利弊
利:创建对象非常简单简洁。
弊:每调用一次就会在堆空间中创建一个新的地址,非常浪费内存
那么怎么解决这个问题呢?
答:原型对象
3.原型对象
任何函数在被创建时浏览器都会创建一个与之对应的对象,这个对象就称之为原型对象。并且实例对象可以随意调用原型对象里的方法,所以我们直接给原型对象添加方法,这样就避免了全局变量污染和内存浪费的问题。
//1.构造函数
function Person(name, age) {
this.name = name
this.age = age
}
//2.原型对象
console.log(Person.prototype)
//给原型对象添加方法
Person.prototype.eat = function () {
console.log('吃东西')
}
Person.prototype.learn = function () {
console.log('学习')
}
//3.实例对象
let p1 = new Person('张三', 20)
let p2 = new Person('李四', 25)
console.log(p1, p2)
console.log(p1.eat === p2.eat)//true
4.三者之间的关系
prototype: 属于构造函数指向原型对象
作用:内存浪费与全局变量污染问题
proto:属于实例对象指向原型对象
作用:让实例对象随意调用原型对象的方法、成员
constructor:属于原型对象指向构造函数
作用:可以查看自己的构造函数