图解
原型
所有引用类型都有一个__proto__(隐式原型)属性,属性值是一个普通对象
所有函数都有一个prototype属性,属性值是一个普通对象
所有引用类型的__proto__指向它构造函数的prototype
原型链
当访问一个对象的某个属性时,会现在它本身属性上查找,如果没有找到则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会去它的构造函数的prototype的__proto__中查找,这样一层一层往上查找会形成一个链式结构,称为原型链。
var F = function () {
}
Object.prototype.a = function () {
console.log("Object.prototype.a");
}
Function.prototype.b = function () {
console.log('Function.prototype.b');
}
var f = new F();
F.a();
f.a();
F.b();
f.b();
// Object.prototype.a
// Object.prototype.a
// Function.prototype.b
// Uncaught TypeError: f.b is not a function
图解:
instanceof的原理
判断实例对象的__proto__与构造函数的prototype是不是引用同一个原型对象
var F = function () {
}
Object.prototype.a = function () {
console.log("Object.prototype.a");
}
Function.prototype.b = function () {
console.log('Function.prototype.b');
}
var f = new F();
f instanceof F // true
f instanceof Function // false