函数参数的 JavaScript 执行上下文

2024-01-03

function Apple(){
    this.name="apple";
}
function Orange(){
    this.name="orange";

    this.apple = new Apple();
    this.apple.onCalled=function(){
        alert(this.name);
    }
}
Orange.prototype.onCalled=function(){
    this.apple.onCalled();
}
var orange = new Orange();
orange.onCalled();

目前代码显示“apple”。如何修改“this.apple.onCalled=function()”行以使其显示“橙色”?

即我想将一个函数传递给另一个对象,但是当调用该函数时,访问传递该函数的对象的变量,而不是正在执行该函数的对象的变量。一个明显的解决方案是使用全局变量(例如 Orange.name),但我正在寻找更好的方法,因为有很多对象,并且我不想全局所有内容。


使用闭包。

function Orange(){
    this.name="orange";

    this.apple = new Apple();
    var that = this;
    this.apple.onCalled=function() {
        alert(that.name);
    }
}

了解如何阅读关键字this在 JS 中工作,有点棘手但很容易掌握。

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

函数参数的 JavaScript 执行上下文 的相关文章

随机推荐

  • 点击 UITextField 时防止键盘出现

    我正在使用一个UI文本字段显示计算结果 但我don t希望当用户点击时显示键盘UI文本字段 我使用 UITextField 是因为我仍然希望用户能够将计算复制并粘贴回 UITextField 但我不希望显示键盘 UI键盘将隐藏仅在显示键盘后
  • 用于具有多重分派的数组数组的 Julia 参数函数

    我正在尝试编写两个同名的函数 它们可以利用 Julia 的多重调度功能 并涉及数组和数组数组 假设有这三个输入变量 typeof a gt Array Array T N 1 a Array 1 2 3 4 5 6 typeof b gt
  • 以编程方式将程序集安装到 GAC 中

    我需要使用 C 在 GAC 中安装程序集 下面是我的代码 new System EnterpriseServices Internal Publish GacInstall MyAssembly dll 上面的代码给出了错误 需要绝对路径
  • Objective-C 和 Core Data 中的正则表达式

    有在 Objective C 中使用正则表达式的指南吗 具体要在 Reg Ex 中输入什么内容 核心数据属性中的字段 特别是 如何将输入限制为仅限一定数量的数字 字母以及英国邮政编码 Thanks 根据 Apple 文档 NSPredica
  • 使用 jquery 模板的多维数组

    我有以下 JavaScript 对象 var arr id 1 name one id 2 name two id 3 name three id 4 name four id 5 name five id 6 name six I m t
  • 在 Google 电子表格中导入 XML 并返回 Google 搜索结果

    我正在尝试使用以下命令将 Google 搜索结果上传到我的 Google 电子表格中importxml以前有效的代码不再有效了 我有 IMPORTXML https www google com search q site query nu
  • 在 hibernate 中检索单个字段而不是整个 pojo

    我对休眠有一些疑问 表 Employee Master 身份证号 名称 varchar 工资长 POJO EmployeeMaster java public class EmployeeMaster private int id priv
  • 从 jQuery 调用 Web 服务

    我正在尝试使用 jQuery 来使用我的 Web 服务 并且基本上只需要 Web 服务来调用函数即可 我在 NET 中使用的代码是这样的 ServiceContract Namespace http Sinvise Service publ
  • 对角线移动使玩家走得更快

    我有这个简单的移动脚本 if x gt 0 if key pygame K a or key pygame K LEFT rect player move ip 1 speed 0 if x lt SCREEN WIDTH 110 if k
  • 保存禁用字段

    在我的 edit ctp 中 我有一个不需要用户更改的选择框 所以我把array disabled gt true 但是这个字段不会出现 pr this gt data 并在保存时显示错误 有什么选择可以解决这个问题 如果您知道数据的值 则
  • Python Pandas Drop Duplicates 保持倒数第二

    选择 pandas 数据框中每个重复集的倒数第二个的最有效方法是什么 例如我基本上想做这个操作 df df drop duplicates Person Question take last True 但是这个 df df drop dup
  • 如何在 Clojure 中的嵌套数组映射中查找键到值的路径?

    假设我有 def a map foo bar biz baz qux 我如何找到给定值 qux 的键路径 这样 get in a map
  • gcc 4.5 特有的 C++ 数组创建问题

    以下代码适用于 gcc 2 9 至 4 4 版本 但不适用于 4 5 版本 struct Pass int main void Pass passes new Pass 10 gcc 4 5 的具体错误消息是 prob cc In func
  • 如何保留 int 变量的前导零?

    下面是一段代码 是功能性解密和加密程序的一部分 while checkvar lt maxvar is set to lt as maxvar is 1 to high for the index of var output append
  • 正则表达式阻止 nginx 中的 url

    我想阻止访问末尾有多余字符的网址 例如 我希望 nginx 阻止请求https www example com url pattern amp extra chars more extra 但希望它允许https www example c
  • 获取android中的账户列表

    我正在开发一个应用程序 我需要在其中查看用户手机中的帐户列表 我已经执行了这段代码 它似乎工作得很好 我面临的唯一问题是我想要获取帐户列表而不仅仅是一个帐户 那么如何实现这一目标呢 我很确定需要一个列表视图 但我没有得到任何关于如何在这里使
  • 移动Web应用程序的服务器端架构

    在我开发过的大多数桌面 Web 应用程序中 您都需要一个服务器端 Web 框架 服务器端 Web 框架 Struts Spring MVC 等 具有某种用于处理请求的控制器 然后是用于生成动态内容的模板引擎 Velocity JSP 等 现
  • Oracle 10G XE 的 JDBC 驱动程序

    我已经安装了Oracle 10G XE 我想使用 JDBC 连接到它 我应该使用哪个驱动程序以及从哪里下载它 谢谢 在安装了服务器的机器上 Oracle JDBC 驱动程序位于ORACLE HOME jdbc lib 就放ojdbc14 j
  • 如何暂停用js和html5制作的简单画布游戏?

    在遵循 YouTube 上的一些简单教程后 我创建了一个简单的贪吃蛇游戏 问题是游戏没有暂停功能 例如 当按 P 时 游戏应该暂停 恢复 并且当蛇碰到画布边界时 游戏会自行重新启动 但这是另一个问题 这是我拥有的游戏的完整代码 https
  • 函数参数的 JavaScript 执行上下文

    function Apple this name apple function Orange this name orange this apple new Apple this apple onCalled function alert