原型链的理解
面向对象的三大特性
封装 继承 多态
我们知道获取一个对象的属性,如果对象没有该属性就会到对象的原型上面获取,这里引出原型链的概念,原型上也可以有原型
1 var obj = { 2 name: 'heihei' 3 } 4 obj.__proto__ = { 5 6 } 7 obj.__proto__.__proto__ = { 8 9 } 10 obj.__proto__.__proto__.__proto__ = { 11 age: 18 12 } 13 console.log(obj.age); 14 console.log(obj.__proto__.__proto__.__proto__.__proto__);
15 console.log(obj.__proto__.__proto__.__proto__.__proto__.__proto);
由结果看出来,查找属性会沿着原型的原型的原型直到尽头查找,这就是原型链
可以看到最顶层的原型是[Object:null prototype]{} 顶层原型的原型为null
直接给结论:Object的原型是顶层原型,也就是说原型链最顶层的原型对象就是Object的原型
var obj1 = {} var obj2 = new Object() console.log(obj1.__proto__); console.log(obj2.__proto__ === Object.prototype); console.log(obj1.__proto__.__proto__); console.log(obj2.__proto__.__proto__);