自言自语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.
原文地址:https://www.cnblogs.com/liyx-jsfe/p/8535655.html