美文网首页
this的运用

this的运用

作者: halogrance | 来源:发表于2017-03-03 10:43 被阅读0次

this的迷之指向

var obj = {

foo:function(){console.log(this)

}

}var bar = obj.foo

obj.foo()// 打印出的 this 是 objbar()// 打印出的 this 是 window请解释最后两行函数的值为什么不一样。

//ES5函数调用的3种形式

func(p1, p2)

obj.child.method(p1, p2)

func.call(context, p1, p2)

//语法糖

func(p1, p2) 等价于

func.call(undefined, p1, p2)

obj.child.method(p1, p2) 等价于

obj.child.method.call(obj.child, p1, p2)

//第三种func.call(context, p1, p2)//this,就是上面代码中的 context。

functionfunc(){

console.log(this)

}func()//等价于functionfunc(){

console.log(this)

}func.call(undefined)// 可以简写为 func.call()//上面是打印出来是什么?

按理说打印出来的 this 应该就是 undefined 了吧,但浏览器里有一条规则: 如果你传的 context 就 null 或者 undefined,那么 window 对象就是默认的 context(严格模式下默认 context 是 undefined) 因此上面的打印结果是 window。

//如果你希望这里的 this 不是 window,很简单:func.call(obj)// 那么里面的 this 就是 obj 对象了

obj.child.method(p1, p2) 的 this 如何确定varobj = {

foo: function(){

console.log(this)

}

}

obj.foo()

按照「转换代码」,我们将 obj.foo() 转换为

obj.foo.call(obj)

好了,this 就是 obj。搞定。

回到题目varobj = {

foo:function(){console.log(this)

}

}varbar = obj.foo

obj.foo()// 转换为 obj.foo.call(obj),this 就是 objbar()// 转换为 bar.call()// 由于没有传 context// 所以 this 就是 undefined// 最后浏览器给你一个默认的 this —— window 对象

相关文章

  • this的运用

    this的迷之指向 var obj = { foo:function(){console.log(this) } ...

  • if 运用

    一、判断语句 满足条件做某事 二、else 多个条件判断 三、写法 多个条件: 单个条件:

  • 运用

    光有知识是不够的,还要学会运用,光有愿景是不够的,还应当行动。 依旧在市场找产品的一天,和前几天不同的是,今天终于...

  • 运用

    这一周选网课的时候,有个选项灰色不能选择,想到了选项的disabled属性,f12调出控制台,删除checkbox...

  • 运用

    递归应用,计算二叉树的深度和二叉树的高度。自顶向下和自顶向上的思路

  • 运用

    社会资源 政府资源

  • 运用

    自己虽然关于时间的文章写了很多,但是在运用方面还是存在很多欠缺,所以在自己感觉不知道干啥的时候,静下心来,想一想或...

  • 装修灯带用得好,新家颜值翻三倍

    天花板灯带运用 墙面灯带运用 地面灯带运用 柜体中灯带的运用

  • 思维导图与英语运用

    思维导图在英语学科中的运用,可以分为三大方面,简单运用、复杂运用和教学运用。 简单运用包括记单词、整理音素...

  • 背景的运用

    z-index 当元素开启定位之后就可以设置z-index这个属性。 这个属性可以提升定位元素所在的层级。 z-i...

网友评论

      本文标题:this的运用

      本文链接:https://www.haomeiwen.com/subject/qbmlgttx.html