JS中构造函数和原型的细节分析

接触JavaScript语言一段时间,构造函数和原型是JS中重要的部分。前几天想构造函数三角形彻夜难眠,就把近期的想法写一写。

JavaScript中使用构造函数的目的就是创建新对象。相对于强类型语言java使用class创建对象,JS创建对象主要有两种方法:第一种是字面量形式创建(不提倡使用,大量使用影响性能,内存伤不起);第二种方法就是构造函数创建对象(建议使用)。还有其他小众的方法在此不赘述。

使用构造函数创建新对象过程中,也会有一些鸡肋存在。构造函数创建对象,用this作为指针,指向当前对象的属性和方法。实际操作中,创建多个对象时会开辟新的内存多次创建属性和方法,对于浏览器的性能是一个浪费。这时候就需要原型进行优化。

构造函数通常需要大写,使用new构建一个新的构造函数。构造函数默认返回新创建的对象。如果创建对象中返回简单类型的数据,不影响构造函数创建的对象。如果返回的是新对象,那么创建的对象不会返回,返回的是新的对象。

原型可以理解为是一个对象,在构造函数创建新对象时就存在。构造函数名.prototype——构造函数通过prototype属性可以访问到原型对象。原型可以有属性和方法。

使用原型可以解决构造函数内存问题:构造函数创建对象过程中,相同的方法会调用多次,不利于内存。将公共方法放在原型中,创建新对象直接调用原型中的方法,代码更合理,性能更优化。弥补了构造函数创建对象的不足。对象中不具有的属性和方法,可以在原型链中寻找。通过构造函数.prototype获取原型(项目常用),通过实例对象.__proto__获得原型(测试常用)。

简单画了两个x-mind图,更清晰一些。

JS中构造函数和原型的细节分析

JS中构造函数和原型的细节分析