为了账号安全,请及时绑定邮箱和手机立即绑定

关于this指向的问题,如下代码

关于this指向的问题,如下代码

潇潇雨雨 2019-03-12 16:15:23
<a id="test"><span>测试一下</span></a><script type="text/javascript">document.getElementById("test").onclick=function(){    console.log(this);    function fun(){        console.log(this);    }    fun();}document.getElementById("test").click();</script>如上,为什么打印的第一个是对象,第二个是window,求解释...
查看完整描述

3 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

https://segmentfault.com/a/11...

看函数的四种调用模式。

函数的四种调用模式
函数模式
特征:就是一个简单的函数调用,函数名前面没有任何的引导内容

this在函数模式中的含义: this在函数中表示全局对象,在浏览器中是window对象

方法模式
特征: 方法一定是依附于一个对象, 将函数赋值给对象的一个属性, 那么就成为了方法.

this在方法模式调用中的含义:表示函数所依附的这个对象

构造器调用模式
特征:使用 new 关键字, 来引导构造函数.

由于构造函数只是给 this 添加成员. 没有做其他事情. 而方法也可以完成这个操作, 就 this 而言, 构造函数与方法没有本质区别.

构造函数中发this与方法中一样, 表示对象, 但是构造函数中的对象是刚刚创建出来的对象

ps:补充关于构造函数中return关键字的补充说明

构造函数中不需要return, 就会默认的return this
如果手动的添加return, 就相当于 return this
如果手动的添加return 基本类型; 无效, 还是保留原来 返回this
如果手动添加return null; 或return undefiend, 无效
如果手动添加return 对象类型; 那么原来创建的this就会被丢掉, 返回的是 return后面的对象
上下文调用模式
特征:上下文(Context),就是函数调用所处的环境。上下文调用,也就是自定义设置this的含义。

常见的就是通过call 、apply和bind调用


查看完整回答
反对 回复 2019-03-16
  • 3 回答
  • 0 关注
  • 555 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号