资讯专栏INFORMATION COLUMN

JavaScript this简明笔记

WalkerXu / 1562人阅读

摘要:动态绑定的并不指向自身。是在运行时候进行绑定的,,并不是编写的时候绑定的。就是这个记录的一个属性。最常见的执行上下文就是,如很明显,函数在这个环境下执行,所以指向了。四条绑定规则的优先级优先级最高的是绑定,中调用函数,绑定到新创建的对象中。

动态绑定

JavaScript的this并不“指向自身”。

this是在运行时候进行绑定的,,并不是编写的时候绑定的。

this指向执行上下文,何为执行上下文,我的理解是函数在“哪里”执行的,这个记录会包含函数在哪里会被调用(调用栈),函数的调用方式,传入参数等信息。this就是这个记录的一个属性。最常见的执行上下文就是window,如

var a=2;
function foo(){
    alert(this.a);    //2
}
foo();

很明显,foo函数在window这个“环境”下执行,所以this指向了window。(但在严格模式下,this不默认指向window,所以代码弹出undefined)

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

函数foo在obj的环境下执行,this默认绑定到obj上。
以上两种都属于默认绑定。

JavaScript中可以控制this的绑定

js中有call()和apply()可以显性的传入要绑定的对象

var obj={
    a:10
}
function foo(){
    alert(this.a);           
}
foo.call(obj);             // 10

 new绑定

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

使用new来调用foo()时。我们会构造一个新对象并把它绑定到foo()调用中的this上。

this四条绑定规则的优先级

优先级最高的是new绑定,new中调用函数,this绑定到新创建的对象中。

其次的是call,apply中显性传入要绑定的对象。

函数是否在某个上下对象中调用,如果是,this绑定的是上下文对象

如果都不是,函数在全局对象执行,则绑定到全局对象中,在严格模式下,就绑定到undefined。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79345.html

相关文章

  • React学习笔记—数据展示

    摘要:我们使用最基本的事就是用来展现数据。使得展现数据变得简单,并且当数据改变时,能自动保持的更新。使用了内部的虚拟,当数据发生改变,先在虚拟中计算变化,最后将变动的部分反应到真实的中。可以把它看作有着和状态并且可以返回结构的函数。 我们使用UI最基本的事就是用来展现数据。React使得展现数据变得简单,并且当数据改变时,React能自动保持UI的更新。 开始 创建一个简单的Demo: ...

    Magicer 评论0 收藏0
  • 命令行神器 Click 简明笔记

    摘要:是用写的一个第三方模块,用于快速创建命令行。快速使用的使用大致有两个步骤使用装饰一个函数,使之成为命令行接口使用等装饰函数,为其添加命令行选项等。本文标题为命令行神器简明笔记本文链接为参考资料学习笔记模块 Click Click 是用 Python 写的一个第三方模块,用于快速创建命令行。我们知道,Python 内置了一个 Argparse 的标准库用于创建命令行,但使用起来有些繁琐,...

    luoyibu 评论0 收藏0
  • JavaScript面向对象编程简明教程

    摘要:这样每个实例独享自己的属性,并和其他同类型的实例共享方法构造函数原型以上这种方式定义的类型,可以通过来判断一个实例是否是类型的实际上是通过实例的原型链来判断一个对象是否某个类型的实例的,具体的细节后面会详细介绍。 JavaScript面向对象编程 如何定义自定义类型 首先需要明确,JavaScript并不是传统意义上的OO语言,它并没有class的概念, 而是包含了另一套异常强大的...

    myeveryheart 评论0 收藏0
  • 深入JavaScript(一)this & Prototype

    摘要:然而事实上并不是。函数本身也是一个对象,但是给这个对象添加属性并不能影响。一图胜千言作者给出的解决方案,没有麻烦的,没有虚伪的,没有混淆视线的,原型链连接不再赤裸裸。所以是这样的一个函数以为构造函数,为原型。 注意:本文章是个人《You Don’t Know JS》的读书笔记。在看backbone源码的时候看到这么一小段,看上去很小,其实忽略了也没有太大理解的问题。但是不知道为什么,我...

    The question 评论0 收藏0
  • JavaScript 原型继承之精髓

    摘要:它的原型也是对象。只要你完全抛开面向对象的继承思路来看的原型继承,你会发现它轻便但强大。最后写出来的代码会是这样请注意,只有函数才有属性,它是用来做原型继承的必需品。 一篇文章让你搞清楚 JavaScript 继承的本质、prototype、__proto__、constructor 都是什么。 很多小伙伴表示不明白 JavaScript 的继承,说是原型链,看起来又像类,究竟是原型还...

    xingqiba 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<