两道关于prototype原型链的面试题

第一道:

      function A() {
    
    }
      A.prototype.n = 1
      var b = new A()
      A.prototype = {
    
    
        n: 2,
        m: 3,
      }
      var c = new A()
      console.log(b.n, b.m, c.n, c.m)

在这里插入图片描述
题目分析:下面图中画出了上面程序执行时,变量在内存中的状态,A.prototype最后改变了指向,但实例b仍然指向原来的地址,该地址没有存放m所以b.m为undefined。
在这里插入图片描述

第二道:

      function Foo() {
    
    
        Object.prototype.a = function () {
    
    
          console.log('可访问a')
        }
      }
      Function.prototype.b = function () {
    
    
        console.log('可访问b')
      }

      var foo = new Foo()
      foo.a();//'可访问a'
      foo.b();//报错
      Foo.a();//'可访问a'
      Foo.b();//'可访问b'

在这里插入图片描述
上图清晰的标注了a与b存放的位置,通过原型链,严格按照线所指的方向能到达a或b就是可访问的。

猜你喜欢

转载自blog.csdn.net/weixin_43334673/article/details/109624277