javascript - JS 浏览器和 node 脚本 this 的区别

查看:74
本文介绍了javascript - JS 浏览器和 node 脚本 this 的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

function test() {
  var name = 'tom';

  var obj = {
    name: 'jack',
    nick: 'halun',
    frind: this.name+"  "+this.nick,
    print: function (){
      console.log(this.name);
    }
  }

  console.log(obj.frind);
  obj.print();
}
test();

在给 obj 赋值时,node 环境下无法访问到 this.namevv
请问这是什么原因

解决方案

如果在浏览器环境下:
console.log(obj.frind);这句想打印obj对象的frind属性,但是frind: this.name+" "+this.nick,这里的this指向哪个对象呢?这里需要注意的是:obj是字面量对象,它是没有this变量的,那么这个this应该是指向全局对象window,但是window对象下没有name和,window下有一个默认的name属性,但值为空字符串,而无nick属性,所以这时会打印:

注意undefined前面有个空格对应的是this.name。

node全局环境下应该是没有name和nick属性的,那么会打印两个undefined:

PS:关于this,调用obj.print()时,相当于调用了一个函数,函数被调用时都会自动获得两个特殊变量:this和arguments。this对象是在运行时基于函数的执行环境绑定的,在全局环境下,this指向全局对象(浏览器中是Window对象),而当函数被作为某个对象的方法调用时,this就指向这个对象(参考《JavaScript高级程序设计》第7章函数表达式 第182页)。

再啰嗦两句:我觉得this最好只在对象的方法中出现,这样它被哪个对象调用,this就指向哪个对象,否则this就会指向全局对象。

这篇关于javascript - JS 浏览器和 node 脚本 this 的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆