javascript - 为什么this.func不是函数?(构造函数内的方法,在构造函数内调用,提示这个方法不是函数)

查看:293
本文介绍了javascript - 为什么this.func不是函数?(构造函数内的方法,在构造函数内调用,提示这个方法不是函数)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

function Bird(name){
    this.name = name;
    this.sayName = function(){
        console.log('hello '+this.name +' guys');
    }
    setTimeout(function(){
       this.sayName();
    },1000);
 }
var a = new Bird();
a.sayName();

Uncaught TypeError: this.sayName is not a function

我指setTimeout上调用的this.sayName().
如果它指window对象上没有sayName函数我还能理解,但是去掉this.sayName()后面的括号后浏览器就没出现错误提醒了。为什么
我脑子短路了

解决方案

首先,异步函数运行的时候,this已经不是当前对象了,而是window,所以setTimeout里面的this.sayName其值为undefined

然后,去掉括号之后仅仅表示取出这个引用的值,但是并不会对它做任何操作。
如果这个值不存在,那么取出的值就是undefined,然后就这么完了,当然也就不会出错。

你可以把这里改成这样,然后你再运行看看是什么结果:

setTimeout(function(){
   console.log(this.sayName);
},1000);

这篇关于javascript - 为什么this.func不是函数?(构造函数内的方法,在构造函数内调用,提示这个方法不是函数)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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