小何谈原型(上篇)

155 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

1. 为什么要用原型?

原型上所有的方法和属性都可以被构造函数共享(实际开发原型主要共享方法和所有实例公用引用属性),那为什么要共享呢?

/**
* 定义老师的信息
* @param _name		姓名
* @param _type		类型
* @param _age		年龄
*/
function teacher(_name, _type, _age) {
	this.name = _name
	this.type = _type
	this.age  = _age
	this.students = ['小何', '小罗', '小陈']		// 数组也是一种引用类型数据
	this.show = () => {
		console.log(`老师:${ this.name }, 是:${ this.type }, 年龄:${ this.age }`)
		console.log(`共同的学生有:${ this.students }`)
	}
}

// 对象也叫实例
// zs叫做对象变量,对象是等号右边通过new出来的一个实例,而且是运行期间才在堆中开辟对象的内存空间
const zs = new teacher('张三', '语文老师', 28)		// 语文老师
const ww = new teacher('王五', '数学老师', 36)		// 数学老师

zs.show()
ww.show()

方法栈,运行时执行方法会入栈,方法执行结束后会出栈

image.png

2. 没有用原型会有什么问题?

总结问题:所有teacher对象也叫teacher实例,都有相同的学生对象,相同的学生对象用students英文表示,所有teacher对象都有相同的show方法,但我们发现每一个teacher对象,也叫teacher实例都单独分配一个students属性空间和一个show方法空间

如果不使用原型,会导致大量的空间浪费

答案: 使用原型解决所有实例上的方法,还有所有实例上的共同属性都可以放到原型上去定义

最后

公众号:小何成长,佛系更文,都是自己曾经踩过的坑或者是学到的东西

有兴趣的小伙伴欢迎关注我哦,我是:何小玍。大家一起进步鸭