zoukankan      html  css  js  c++  java
  • 自言自语WEB前端面试题(二)

    今天换道题,新鲜出炉的

    var Model=function(){
      this.name='lilei';
      this.age=20;
    }
    Model.prototype.say=function(){
      console.log(this.name);//①
      console.log(this.getFullName());//②
      function test(){
        console.log(this.name);//③
        console.log(this.getFullName());//④    
      }
      test();
    }
    Model.prototype.getFullName=function(){
      return this.name+'';
    };
    var m=new Model();
    m.say();

    哇,这个题乍一看有点绕。我们可以简单的分析一下

    首先我们先注意下这段代码主要做了什么:

    创建一个构造函数Model,利用Model去构建m对象

    构造函数原型对象定义了两个函数, say 和 getFullName 

    m调用 say 函数 ,其中 say 函数内的 this 此时指向对象 m 

    m有两个属性 name 和 age 所以 ① 输出 lilei

    调用getFullName函数的是say中的this 根据上下文 他应该是m

    函数内在最后返回了一个 this.name+'' 这个时候根据上下文 

    this指向依然是m JavaScript的链式调用在这里也有一些体现

    所以②输出内容为 lilei

    当test在say函数内声明 并且调用时,我们只需要关注一件事

    调用test的是谁 如果没有任何指示,他的上下文就是window

    那③ 输出结果就是window.name 它默认是个空字符串

     ④这里会直接报错,因为window内不存在getFullName函数 

    正确的输出结果是:

    ——————end——————

    这几天在做活动,后面可能要进入正式开发的流程了

    最近真的闲的长毛了,虽然还挺爽,但是长期不正经开发工作很容易懒惰的

    加了个油~~

    Learn to walk before you run.
  • 相关阅读:
    unitest 测试集 实例
    python3 设置滚动条
    python3 mail
    wordpress +window 走起~
    获取在线python 文档
    chrome 自动加载flash
    报错 hint: Updates were rejected because the remote contains work that you do 解决方法
    Bitcode
    Autorelease
    atomic
  • 原文地址:https://www.cnblogs.com/liyx-jsfe/p/8535655.html
Copyright © 2011-2022 走看看