资讯专栏INFORMATION COLUMN

小tips:JS中this操作执行像(object.getName = object.getName

lcodecorex / 2382人阅读

摘要:来分析下调用的结果第一行代码跟平常一样调用了返回了因为就是。第二行代码在调用这个方法之前给它加了一个括号。第三行代码先执行了一条赋值语句,然后再调用赋值后的结果。因为这个赋值表达式的值是函数本身,所以的值不能得到维持,结果就返回了。

var name = "The window";
var object = {
    name: "My Object",
    getName: function(){
        console.log(this.name);
    }
}

object.getName(); // My Object 
(object.getName)(); // My Object 
(object.getName = object.getName)(); // The window

来分析下调用的结果:

第一行代码跟平常一样调用了object.getName()返回了My Object ,因为this.name就是object.name

第二行代码在调用这个方法之前给它加了一个括号。虽然加了一个括号后,就好像只是在引用一个函数,但是this的值得到了维持,因为object.getName(object.getName)的定义是相同的。

第三行代码先执行了一条赋值语句,然后再调用赋值后的结果。因为这个赋值表达式的值是函数本身,所以this的值不能得到维持,结果就返回了The window

当然你不大可能像第二行和第三行代码一样调用这个方法。这个例子只是说明了一个细微的语法变化,都有可能意外的改变this的值。

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

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

相关文章

  • JavaScriptthis

    摘要:在中,只有两种指向,一种是指向当前的封闭作用域,或者是指向当前作用域的外层,的最顶层就是对象。在非严格模式下,默认指向全局对象。浏览器环境全局函数方法用于在指定的毫秒数后调用函数或计算表达式。它会不停地调用函数,指导被调用或者窗口被关闭。 1:基本概念 this字面意思是当前,当前执行代码的环境对象或者是上下文。代表着当前方法执行的环境上下文,那么何为环境上下文,通俗的说,谁调用了函数...

    cucumber 评论0 收藏0
  • jsthis指向问题: (object.getName = object.getName)()为何

    摘要:输出的原因,就不谈了啊。论证赋值表达式,返回值是后者,借鉴自网上看到的方法输出输出函数运行后,输出的是赋值语句的后者的值此时值是。 var name = The Window; var object = { name : My Object, getName: function(){ console.log(this.name); } }; o...

    Drummor 评论0 收藏0
  • JS的闭包与this详解

    摘要:删除对匿名函数的引用,以便释放内存在匿名函数从中被返回后,它的作用域链被初始化为包含函数的活动对象和全局变量对象。闭包与变量我们要注意到,闭包只能取到任意变量的最后值,也就是我们保存的是活动对象,而不是确定值。 工作中会遇到很多 this对象 指向不明的问题,你可能不止一次用过 _self = this 的写法来传递this对象,它每每会让我们觉得困惑和抓狂,我们很可能会好奇其中到底发...

    fireflow 评论0 收藏0
  • 《JavaScript高级程序设计》(第3版)读书笔记 第7章 函数表达式

    摘要:定义函数表达式的方式有两种函数声明。不过,这并不是匿名函数唯一的用途。可以使用命名函数表达式来达成相同的结果闭包匿名函数和闭包是两个概念,容易混淆。匿名函数的执行环境具有全局性,因此其对象通常指向通过改变函数的执行环境的情况除外。 定义函数表达式的方式有两种: 函数声明。它的重要特征就是 函数声明提升(function declaration hoisting) 即在执行代码之前会...

    邹立鹏 评论0 收藏0
  • 前端学习笔记之闭包——看了一张图终于明白啥是闭包了

    摘要:在一个闭包环境内修改变量值,不会影响另一个闭包中的变量。直到看到函数闭包闭包这篇文章的代码一部分,终于明白其中的逻辑了。 闭包 闭包定义:指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。函数内部可以直接读取全局变量。函数内部变量无法在函数外部访问。函数内部声明要用var或者let声明,不然会变成全局变量链式作用域:子对象会一级级向上寻找...

    andycall 评论0 收藏0

发表评论

0条评论

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