1、js中的原型和原型链
和其他的面向对象编程语言不同,最开始js并没有引入class的概念,但是js中有在大量使用对象,为了保证对象之间的联系,JavaScript引入了原型与原型链的概念。
1.1、什么是原型
在js中,每一个构造函数都拥有一个prototype属性,这个属性指向一个对象,也就是原型对象。原型对象默认拥有一个constructor属性,指向指向它的那个构造函数,每个对象都拥有一个隐藏的属性[[prototype]],指向它的原型对象。原型对象就是用来存放实例中共有的那部分属性。
1.2. 什么是原型链
js中所有的对象都是由它的原型对象继承而来。而原型对象自身也是一个对象,它也有自己的原型对象,这样层层上溯,就形成了一个类似链表的结构,这就是原型链, 所有原型链的终点都是Object函数的prototype属性.
1.3. 常见的题目
Array.__proto__ === Function.prototype // true
Array.__proto__.__proto__ === Object.prototype // true
Function.prototype.__proto__ === Object.prototype // true
function F(){
}
Function.prototype.a = function(){
console.log('a1')
}
Function.prototype.b = function(){
console.log('b1')
}
Object.prototype.a = function(){
console.log('a2')
}
Object.prototype.b = function()