使用对象的方法,为什么控制台结果里,多了一个undifined?

发布于 2017-05-06 02:04:25 字数 444 浏览 1137 评论 7

Q1为什么控制台,最后输出了两个undifined?

var a = {
  b: {
    m: function() {
      console.log(this.p);
    },
    p: 'Hello'
  }
};

var hello = a.b.m;
hello()

Q2感觉这里也是多了一个undifined

//代码
var a = {
  b: {
    m: function() {
      console.log(this.p);
    },
    p: 'Hello'
  }
};
var hello = a.b;
hello.m();

补充:
问题来源:
阮一峰的JS标准里this关键字
上面代码就是链接里,2.(3)对象的方法 最后一段

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

浮生未歇 2017-05-06 02:04:36

多出来的undefined是js语句本身的值,剩下的就是this的问题了。

甜柠檬 2017-05-06 02:04:31

1.hello()没有返回值 2.console.log()这个函数没有返回值

泛泛之交 2017-05-06 02:04:28

个人觉得 第一个undefined是因为函数没有返回值,第二个undefined有可能是用浏览器调试的原因,你试试用命令行调试会不会出现第二个undefined。

泛泛之交 2017-05-06 02:04:28

我觉得吧是你吧这个方法的this指针改变了 你吧a对象里的方法定义到了window下面一个变量里 这时候this指向了window 而window下并没有p的定义 你可以在var hello之前声明一个var P就明白了

晚风撩人 2017-05-06 02:04:27

你用的是Chrome浏览器的控制台吗?第二个undefined是本来就有的,和你的代码无关。
输入var a = 1;
按回车也有一个undefined。

甜柠檬 2017-05-06 02:04:26

是最后一条语句的返回值啦,你在 m 函数里加一个 return “test” 试试?

晚风撩人 2017-05-06 02:04:25

自动自答,总结前人的帮助:
Q1第一个undefined,因为hello指向了一个方法,可以看做functionName,所以this就是windowthis.p; //window.p//首先声明一个window.p,未赋值,值是undifined
关键是多了一个undifined!第二个undefined,前面有个箭头,在 m 函数里加一个 return 'test',//"test"所以,这个箭头可以看做return后面的值,这里m函数没有return,没有返回值就是undifined总结:前面这个箭头,是控制台独有的,命令行调试时没有控制台先是执行函数,然后是,输出函数的执行结果(比如再用来 给别的赋值)
Q2第一个undefined,因为hello指向了一个对象,可以看做b,所以this.p; //b.p

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文