• 原型链的本质是链表
  • 原型链上的节点是各种原型对象,比如Fucntion.prototype、Object.protot…
  • 不同于p.next,原型链通过__proto__属性连接各种原型对象

image.png

原型链知识点

  • 如果A沿着原型链能找到B.prototype,那么A instanceof B为true
  • 如果在A对象上没有找到x属性,那么会沿着原型链找x属性

面试题

题目: 简述instanceof的原理,并用代码实现
知识点:如果A沿着原型链可以找到B.prototype,那么A instanceof B为true
解法:遍历A的原型链,如果找到B.prototype,返回true否则返回false

  1. const instanceOf = (A, B) => {
  2. let p = A
  3. while (p) {
  4. if (p === B.prototype) {
  5. return true
  6. }
  7. p = p.__proto__
  8. }
  9. return false
  10. }
  11. console.log(instanceOf({}, Object))

题目:一下代码的执行结果👇

  1. var foo = {},
  2. F = function () { }
  3. Object.prototype.a = 'value a'
  4. Function.prototype.b = 'value b'
  5. console.log(foo.a); // 'value a'
  6. console.log(foo.b); // undefined
  7. console.log(F.a); // 'value a'
  8. console.log(F.b); // 'value b'