1、构造函数是什么
所谓的构造函数其实就是一个普通的函数前面加了new运算符,其本质也是一个函数,所以构造函数都有函数的prototype属性。
2、实例是什么
实例就是通过构造函数创建出来的对象。
var A = function () {
this.name = '漩涡鸣人'
}
var obj = new A()
复制代码
3、原型是什么
原型指的就是原型对象,至于是谁的原型对象,需要靠函数的prototype属性和实例的__proto__属性来区别。
4、原型链是什么
原型链指的是从一个实例对象开始往上找,这个实例对象的__proto__属性所指向的就是这个实例对象的原型对象。
例如:使用obj表示实例,则原型对象表示为obj._proto_。同时,这个原型对象也是一个对象。而且还有上一级的原型对象,相对于上一级原型对象而言,它也是一个实例对象,那么它也拥有__proto__属性,它的__proto__属性指向它的原型对象,后面也以此类推,直到Object.prototype这个原型为止Object.prototype做为原型链的末尾点。
通过上图第一个红色框出来的属性可看到,obj通过调用两次__proto__属性就已经到达Object,Object是一个构造函数,Object拥有属性prototype,可以指向它的原型。第三次调用的时候已经返回空,表明Object.prototype为原型链的末端。
5、构造函数与实例之间的关系
实例是通过构造函数创建
6、构造函数与原型(对象)之间的关系
构造函数通过其属性prototype去寻找它关联的原型,如果用M表示构造函数,A.prototype所指的就是它关联的原型对象,而原型对象可以通过构造器constructor来寻找与自身关联的构造函数,所以就有A.prototype.conctructor===A。
7、原型对象上的属性、方法可以被实例共享
var A = function (name) {
this.name = name
}
// 构造函数原型对象上定义属性和方法
A.prototype.country = "AS"
A.prototype.say = function () {
console.log('嘿嘿嘿');
}
var obj1 = new A('漩涡鸣人')
var obj2 = new A('宇智波佐助')
复制代码
分别调用返回值为都为true,说明原型对象上的属性和方法可以被实例共享。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END