#博学谷IT学习技术支持#
目录
1.构造函数和原型
1.1静态成员和实例成员
1.1.1实例成员
1.1.2静态成员
1.2构造函数的问题
1.3构造函数原型prototype
1.4对象原型
1.5constructor构造函数
1.6原型链
1.7构造函数实例和原型对象三角关系
1.8原型链和成员的查找机制
1.9原型对象中this指向
1.10通过原型为数组扩展内置方法
2.继承
2.1call()
2.2子构造函数继承父构造函数中的属性
2.3借用原型对象继承方法
1.构造函数和原型
1.1静态成员和实例成员
1.1.1实例成员
1.1.2静态成员
1.2构造函数的问题
构造函数方法很好用,但是存在浪费内存的问题。
1.3构造函数原型prototype
构造函数通过原型分配的函数是所有对象所共享的。
JavaScript 规定,每一个构造函数都有一个prototype 属性,指向另一个对象。注意这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有。
我们可以把那些不变的方法,直接定义在 prototype 对象上,这样所有对象的实例就可以共享这些方法。
1.4对象原型
1.5constructor构造函数
如果我们修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动的利用constructor指回原来的构造函数如:
以上代码运行结果,设置constructor属性如图:
1.6原型链
每一个实例对象又有一个proto属性,指向的构造函数的原型对象,构造函数的原型对象也是一个对象,也有proto属性,这样一层一层往上找就形成了原型链。
1.7构造函数实例和原型对象三角关系
1.8原型链和成员的查找机制
任何对象都有原型对象,也就是prototype属性,任何原型对象也是一个对象,该对象就有proto属性,这样一层一层往上找,就形成了一条链,我们称此为原型链;
1.9原型对象中this指向
构造函数中的this和原型对象的this,都指向我们new出来的实例对象
1.10通过原型为数组扩展内置方法
2.继承
2.1call()
call()可以调用函数
call()可以修改this的指向,使用call()的时候 参数一是修改后的this指向,参数2,参数3..使用逗号隔开连接
2.2子构造函数继承父构造函数中的属性
先定义一个父构造函数
再定义一个子构造函数
子构造函数继承父构造函数的属性(使用call方法)
2.3借用原型对象继承方法
先定义一个父构造函数
再定义一个子构造函数
子构造函数继承父构造函数的属性(使用call方法)
如上代码结果如图: