美文网首页
你不知道的javascirpt--(this)

你不知道的javascirpt--(this)

作者: O8 | 来源:发表于2017-02-25 16:50 被阅读0次

这是你认识的this吗?

初识javascript的时候,人们容易把this的理解指向函数的本身。
function foo() { console.log(num) this.count++ } foo.count = 0 var i for (i = 0; i < 10; i ++){ if (i > 5) { foo(i) } } // 9,8,7,6

console.log(foo.count) // 0

运行程序输出了4个值,可以明确的是函数执行了4次,那么问题来了,为什么foo.count => 4?
其实很多人对this都存在着误解。

this到底是什么?

首选我们要对this进行分析,this是变化的。在不同的情况下this的绑定不同的值。那我们首先要了解一下this的绑定的规则。this的绑定规则有一下几种规则:

默认绑定

function foo () {
console.log(this.a)
}
var a = 1
foo()
// 1

可以看出this.a被解析成了全局变量。this绑定在的全局对象上,a自动就成了1。foo()在不带任何修饰的情况下调用绑定了全局对象上,这种绑定称之为默认绑定。

隐式绑定

function foo() {
console.log( this.a )
}
var obj={
a: 2,
foo: foo
};
obj.foo(); // 2

此时的this绑定到了对象obj上了,我们称这种绑定为隐式绑定。隐式绑定的规则是把函数的this绑定到这个上下文的对象中。

显式绑定

function foo() {
console.log( this.a )
}
var obj={
a:2
}
foo.call( obj ) // 2

通过 foo.call(..),我们可以在调用 foo 时强制把它的 this 绑定到 obj 上。

new绑定

function foo(a) {
this.a = a;
}
var bar = new foo(2);
console.log( bar.a ); // 2

此时的this绑定在了fun上,这种通过new方式绑定的this就是new绑定。

优先级

new > 显式 > 隐式 > 默认

相关文章

  • 你不知道的javascirpt--(this)

    这是你认识的this吗? 初识javascript的时候,人们容易把this的理解指向函数的本身。function...

  • 你不知道你不知道的事

    2017-3-21 最近我一直在讲成长,但成长都不是必须的,有的人按照他们既定的方式生活了一辈子,也从来不知道...

  • 你不知道你不知道的东西

    1987年9月13日,两个窃贼躲过警卫,偷走了放射源,他们不知道这个东西极其危险。 最近总能感受到认知的威胁,你不...

  • 你不知道的不知道

    曾经听到过一个绕口令:你不知道你不知道,你知道你不知道;你知道你知道,你不知道你知道。细细品尝,挺有意思的,人生中...

  • 不知道你不知道的不知道

    2017.1.1 这句话听起来有点绕口,智商低的或者逻辑性差的得需要反应一会儿,比如我。 说明白一点就是你不知道的...

  • 你不知道的你

    人群拥挤 你在角落哭泣 自嘲曾经口中那句 爱笑的女生运气不会差 而你不知道的是 你觉得普通的自己 可能是别人的全世...

  • 你不知道你知道的其实你不知道

    一个以前的同事从一个大公司来到了现在的公司,突然发现他根本不会干了,本来还觉得他挺资深的。我也很困惑,为什么,以前...

  • 你不知道你不知道

    关于自欺欺人就是你觉得自己明白了,进步了,但还是原地踏步,不知进取,这可能是最大的问题点。

  • 你不知道你不知道

    我们永远都在学习,无论是在学校还是在社会,无论是读书还是阅人,学习无处不在。 学了、见了,然后你成为了什么样的你?...

  • 最怕的是,你不知道你不知道

    01 当我知道所谓的阶层固化是跟自己的成长环境有着极大相关性的时候,我便跟自己和解了。 不过,当我知道,最可怕的不...

网友评论

      本文标题:你不知道的javascirpt--(this)

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