JavaScript:那个与这个

2024-02-20

我试图更好地理解 JavaScript 中 that 和 this 的用法。我在这里关注 Douglas Crockford 的教程:http://javascript.crockford.com/private.html http://javascript.crockford.com/private.html但我对一些事情感到困惑。我在下面给出了一个例子,我想知道我是否正确使用了它们:

function ObjectC()
{
   //...
}

function ObjectA(givenB)
{
   ObjectC.call(this); //is the use of this correct here or do we need that?

   var aa = givenB;
   var that = this;

   function myA ()
   {
      that.getA(); //is the use of that correct or do we need this?
   }

   this.getA = function() //is the use of this correct?
   {
       console.log("ObjectA");
   };


}

 function ObjectB()
 {

    var that = this;

    var bb = new ObjectA(that); //is the use of that correct or do we need this?

    this.getB = function()
    {
        return bb;
    };

    that.getB(); //is the use of that correct or do we need this?


 }

请注意,这只是一个示例。


this在 JavaScript 中总是指当前对象,其方法被调用。但有时你需要访问this更深入地了解你的对象。例如,在回调中。就像这样:

function MyClass() {
    this.a = 10;
    this.do = function() {
        http.get('blablabla', function(data) {
            this.a = data.new_a;
        });
    };
}

这是行不通的,因为this在回调中可以参考http,到某个 dom 元素或只是窗口(这确实很常见)。因此,通常的解决方案是定义self or that,别名为this或你的对象,这样你就可以在里面的任何地方引用它。

function MyClass() {
    var self = this;
    this.a = 10;
    this.do = function() {
        http.get('blablabla', function(data) {
            self.a = data.new_a;
        });
    };
}

这应该给你视野 why它被使用并且how应该使用它。

没有其他原因(如我错了请纠正我) 要创建特殊变量,您可以使用this将您的对象发送到其他对象并且做事,很多作业,这样的逻辑,哇...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript:那个与这个 的相关文章

  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 使用模数按字母顺序对列表进行排序

    我在获取元素列表并按字母顺序对它们进行排序方面没有任何问题 但我很难理解如何使用模数来做到这一点 更新 这是按我的方式工作的代码 但是 我更喜欢下面提供的答案的可重用性 因此接受了该答案
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • 如何监听 jQuery AJAX 请求?

    以下两种实现 ajaxRequest 1 2 的方法应该是等效的 话说回来 为什么验证回调已执行的单元测试 3 在 1 中成功而在 2 中失败 我应该如何重写测试 3 来监视 2 中的成功回调 如果我尝试stub jQuery ajax使用
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 将div设置为隐藏,延时后可见

    我试图在 X 时间后 也许甚至在随机时间之后 但现在我们只做固定时间 在黑色背景上出现一个黄色方块 function initialSetup if document getElementById yellow null document
  • Grails 在 javascript 内的 GSP 站点中使用 grails var

    我有一个在 GSP 文件中的 javascript 代码中使用 grails 变量值的问题 例如 我有一个会话值session getAttribute selectedValue 我想在 javascript 代码部分使用这个值 我现在的
  • Electron - 为什么在关闭事件时将 BrowserWindow 实例设置为 null

    The 电子文档 https electronjs org docs api browser window 提供以下代码示例来创建新窗口 const BrowserWindow require electron let win new Br
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 有没有办法阻止 prettier / prettier-now 将函数参数分解为新行

    当使用 prettier prettier now 在保存时进行格式化时 当一个函数包装另一个函数时 它会中断到一个新行 我想知道是否有办法阻止这种行为 例如 期望的输出 app get campgrounds id catchAsync
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a

随机推荐

  • 在 AIR 应用程序安装屏幕上显示图标

    是否可以在 AIR 应用程序安装屏幕上显示图标 我下载了一个 AIR 应用程序 我很惊讶地在第二个安装屏幕上看到了一个图标 当您购买 SSL 证书并使用该证书构建 Air 应用程序时 安装过程中会显示此图标
  • SQLite:.Net 比原生慢得多?

    这是我的查询 SELECT FROM GeoName WHERE 26 3665122100029 Lat 26 3665122100029 Lat 27 5978928658078 Long 27 5978928658078 Long l
  • 4 年每日数据的滚动回归,每个新回归和不同因变量提前一个月

    我有 5 个自变量 附加数据中的 B F 列 和一些因变量 附加数据中的 G M 列 我需要针对所有自变量对每个因变量进行多重回归 回归必须有 4 年的数据窗口 并且每个新的估计都必须提前一个月 我需要提取系数并对每个系数进行 vasice
  • Android 图标下方的文本(按钮)

    我正在尝试创建一个主入口界面 我将创建六个按钮 每个按钮将打开另一个活动 对于每个按钮 我希望它有一个大图标 按钮下方有文字 目前 我可以在按钮上显示图像 但我不知道如何使文本显示在按钮下方 我尝试将文本直接放在图像上 但看起来不太好 这是
  • AngularJS : $pristine 用于 ng-check 检查输入

    我有一个包含大约 100 个问题的表单 每个问题都有一个单选按钮和一些复选框 因此我需要用户能够保存该表单并稍后加载 我还需要检查用户在本次会话中更改了哪些内容 这个问题解决了这个问题 如何表示 AngularJS 中哪些输入字段已更改 h
  • 如何将图像从aws s3下载到imageview中?

    所以我希望能够从我的 s3 存储桶中获取图像并 使用 glide 或 picasso 将该图像加载到 imageview 中 我不想将该图像下载到我的手机中 目前我有这个 downloadButton Button findViewById
  • 程序如何执行?操作系统在哪里发挥作用?

    程序从某种语言编译为 ASM gt 机器代码 直接可执行 当人们说这是平台相关时 意味着形成的二进制文件只能在具有相同指令集架构 如 x86 x86 64 的 CPU 上运行 正确 由于 ISA 的差异 它可能 错误地 可能 根本 不在其他
  • Matlab套接字等待响应

    我正在尝试在 matlab 中运行以下客户端和服务器套接字示例代码 http www mathworks com help instrument using tcpip server sockets html http www mathwo
  • 模板化的operator()重载C++

    有人已经问过这个问题 但该线程最终以原始问题没有得到回答 假设你有这个 template
  • Dart Isolates 的暂停功能未按预期工作

    我一直在玩飞镖分离物 https api dartlang org stable 1 24 3 dart isolate Isolate class html并在使用时遇到了问题isolate pause 功能 import dart io
  • 在 Web 应用程序中的何处存储数据库凭据?

    我想知道您使用什么技术来存储应用程序的数据库凭据 我特别关心 java webapps 但我认为没有必要将问题限制于此 需要考虑的事情 您是否使用属性文件 xml 配置文件或其他文件 它是捆绑到您的应用程序中 即在 jar 文件中 还是单独
  • com.google.android.gms.maps.MapFragment:无法解析符号“地图”

    我已遵循此处的所有指示 没有任何问题 https developers google com maps documentation android start getting the google maps android api v2 h
  • 我在 Nhibernate Query Over fetch 上做错了什么吗?

    我有这个 using ITransaction transaction session BeginTransaction Task tAlias null CompletedTask cAlias null List
  • 从 D 中的字符串获取普通 char*?

    我正在尝试弄清楚如何从 D 字符串 不可变 char 获取普通的可变 C 字符串 char 以便将字符数据传递给遗留的 C 代码 toStringz 不起作用 因为我收到一条错误 说我 无法将 immutable char 类型的表达式 t
  • 在 Python 中切片字符串时如何使用变量作为索引?

    我一直在尝试使用循环从字符串中切出两个字符 但它不是抓取两个字符 而是只抓取一个 我试过了 input i i 1 and input i i 1 但似乎都不起作用 如何使用变量进行切片 完整的例程 def StringTo2ByteLis
  • 查看netbeans中的执行线

    当我按下运行程序按钮 向右指向的绿色箭头 时 如何查看 netbean v6 8 用于执行我的 java 应用程序的执行行 我正在寻找类似的东西 java cp 构建 类主要 我正在尝试从 15 年使用 vi 编写 c 和 c 转向 jav
  • iPhone iOS 5.0 OpenGl ES 2.0

    说真的 我已经花了几周甚至几个月的时间来寻求有关 iPhone 上使用 XCode 4 2 的 OpenGL 的一些认真帮助 我需要一个很好的教程 介绍如何从使用新的 XCode 4 2 的 OpenGL 游戏 模板开始 然后从那里开始进展
  • Chrome 不支持 css @page?

    我有用于打印的CSS 就像这样简单 page top left content TOP SECRET color red bottom center content counter page font style italic 但Chrom
  • 如何使用 Riverpod 在 Flutter 中刷新 FutureProvider 而无需再次显示加载指示器?

    目前我正在刷新一个 FutureProvider 它负责从 Firebase 获取数据并将其显示在一个简单的 ListView 中液体拉动刷新 https pub dev packages liquid pull to refresh包 这
  • JavaScript:那个与这个

    我试图更好地理解 JavaScript 中 that 和 this 的用法 我在这里关注 Douglas Crockford 的教程 http javascript crockford com private html http javas