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() 复制代码
网络异常,图片无法展示
|
方法栈,运行时执行方法会入栈,方法执行结束后会出栈
网络异常,图片无法展示
|
2. 没有用原型会有什么问题?
总结问题:所有
teacher
对象也叫teacher实例
,都有相同的学生对象,相同的学生对象用students
英文表示,所有teacher
对象都有相同的show方法
,但我们发现每一个teacher
对象,也叫teacher实例
都单独分配一个students
属性空间和一个show
方法空间
如果不使用原型,会导致大量的空间浪费
答案: 使用原型解决所有实例上的方法,还有所有实例上的共同属性都可以放到原型上去定义