Javascript:自己的键函数中的对象文字引用而不是“this”

2023-11-24

在作为该文字一部分的函数中引用对象文字是否有问题?它似乎工作得很好,但我想确保没有其他影响。

这是我正在谈论的一个例子:

代替:

var obj = {
    key1: "it",
    key2: function(){return this.key1 + " works!"}
};
alert(obj.key2());

using:

var obj = {
    key1: "it",
    key2: function(){return obj.key1 + " works!"}
};
alert(obj.key2());

两者都可能有问题。

var obj = {
    key1: "it",
    key2: function(){ return this.key1 + " works!" }
};
var func = obj.key2;
alert(func()); // error

When func不作为方法调用obj, this可以引用其他东西(在这里:全局对象“window").

var obj = {
    key1: "it",
    key2: function(){ return obj.key1 + " works!" }
};
var newref = obj;
obj = { key1: "something else"; };
alert(newref.key2()); // "something else works"

在这里,我们从另一个引用访问该对象,尽管obj函数中现在可能指向某个其他对象。

所以你必须选择哪种情况更有可能。如果你真的想保证安全,就预防obj从被交换:

// ES6 - use `const`:
const obj = {
    key1: "it",
    key2: function(){ return obj.key1 + " works always!" }
};

// ES5: use a closure where the `obj` is stored in a local-scoped variable:
var obj = (function(){
    var local = {
        key1: "it",
        key2: function(){ return local.key1 + " works always!" }
    };
    return local;
})();

or you bind()对象的函数:

var obj = {
    key1: "it",
    key2: function(){ return this.key1 + " works always!" }
}
obj.key2 = obj.key2.bind(obj);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript:自己的键函数中的对象文字引用而不是“this” 的相关文章

随机推荐

  • 快速比较字符串可选与非可选

    在 Swift 中比较字符串时 您可以将非可选字符串与可选字符串进行比较 像这样 文本是可选的 并且它是空的 UITextField text True 是因为相等运算符本身解开字符串吗 对于每一个Equatable键入 还为选项定义了操作
  • 如何让 Django 2.0 使用 Oracle 11g 语法而不是 12c?

    这是我的开发环境 Windows 7 x64 Python 3 6 3 64位 虚拟环境 姜戈2 0 CX Oracle 6 1 Oracle 11 2 企业版 64 位 在远程计算机上 我没能做到migrate 姜戈管理 py迁移 因为D
  • 向 Visual Studio 2010 Express 添加库

    似乎无法找到如何添加库的明确答案 项目属性有很多地方可以添加文件路径 但我想知道我是否不应该编辑所有这些路径 有人可以告诉我每个可能条目的用途 如果有更多条目 以及我应该编辑哪些条目 或者方便的教程 我会列出我所知道的条目 目前正在尝试添加
  • 无法解析用户名以确保我已登录网站

    我已经用 python 编写了一个脚本来登录网站并解析用户名以确保我确实能够登录 使用我在下面尝试过的方法似乎可以让我到达那里 但是 我在脚本中使用了从 chrome 开发工具中获取的硬编码 cookie 来获得成功 我尝试过 import
  • 将键盘快捷键绑定到 WPF 视图模型中的命令

    我有一个应用程序 其中我有一个UserControl里面有一个工具栏 这个工具栏有一个按钮Execute反过来 它的命令绑定到ICommand视图模型作为属性公开的派生类
  • R 系统时间的输出中时区消失

    我正在尝试将系统日期和时间输出到文本文件 当我这样做时 时区就会消失 示例如下 gt Sys time 1 2012 05 24 09 58 38 CDT gt currentTime lt Sys time gt currentTime
  • `this` 在默认参数下如何工作?

    所以 ES6 恰好在几个小时前标准化 带来了默认参数对于类似于 PHP Python 等中的函数 我可以执行以下操作 function foo bar dum return bar foo 1 1 foo dum foo undefined
  • Spring Boot 日志记录和 Google Cloud Platform 日志查看器

    我正在 Google Cloud Platform 中运行 Spring Boot 应用程序 并通过 Google Platform Logs Viewer 查看日志文件 在使用 Spring Boot 并仅使用简单的 servlet 之前
  • 如何在 PySpark 中使用列值作为字典的键?

    我有一个小的 PySpark DataFramedf index col1 0 1 1 3 2 4 还有一本字典 LOOKUP 0 2 1 5 2 5 3 4 4 6 我现在想添加一个额外的列col2 to df 等于LOOKUP的值col
  • Oracle 存储过程和自定义数据类型

    我有一个 Oracle 存储过程 它采用两个参数 自定义数据类型和字符串 在Oracle中调用存储过程 我会执行以下操作 EXECUTE MY STORED PROCEDURE MYTYPE T 99 231 mystring 我如何使用
  • 从 Apache 的 Ant PropertyFile 任务中删除日期注释

    我在构建脚本中使用如下所示的 propertyfile 任务
  • 设置 QTreeWidget 标题文本的方法是什么?

    我已经检查过文档here我似乎找不到设置 QTreeWidget 标题或标题文本的方法 如果不设置标题 QTreeWidget 会在我的代码中自动使用数字 1 下面是输出的示例 我假设 QTreeWidget 有一个方法 但我找不到它 您正
  • 类型错误:db.collection 不是函数

    我正在尝试将数据发布到我在 mLab 上创建的数据库 但收到此错误 但我不知道出了什么问题 我还阅读了之前关于此主题提出的问题 但我无法解决我的错误 因为我是新来的 所以在这里我发布了我试图实现的代码 它取自本教程https medium
  • NHibernate 在二次更新中设置外键,而不是在初始插入时设置外键,违反了键列上的非空约束

    我对一个相当简单 我认为 的 NHibernate 用例有疑问 我有一个经典的父实体和子实体 如下所示 public class Parent public virtual int ParentId get set public virtu
  • 使用 Django 1.5 和 IPython 获取 NameError

    我正在运行 Django 1 5 1 Python 2 7 2 和 IPython 0 13 2 如果我在 Django 项目目录中执行 python manage py shell 则会收到以下错误 from django import
  • 为什么 List 不是 IEnumerable

    编辑 我很抱歉 最初的问题措辞含糊不清 我没有得到我正在寻找的答复 对于任何继承自类 Y 的类 X new List
  • 在C中使用宏定义数据结构

    我试图理解使用宏定义数据结构操作的概念 以下代码是使用 FreeBSD 中内置列表库的简单示例 在库中 所有操作都定义为宏 我也在其他几个库中看到了这种方法 我可以看到这有一些优点 例如 能够使用任何数据结构作为列表中的元素 但我不太明白这
  • ES6 - 在类中调用静态方法

    我有这个类 它对静态方法进行内部调用 export class GeneralHelper extends BaseHelper static is env return config get env name env static isP
  • 利用多核的单线程程序

    Java程序的单线程可以自动使用CPU上的多个核心吗 Java程序的单线程可以自动使用CPU上的多个核心吗 是和不是 单线程Java程序将使用多个线程 因为GC JMX 终结器和其他后台线程可以在不同的CPU 无论是CPU还是核心 中运行
  • Javascript:自己的键函数中的对象文字引用而不是“this”

    在作为该文字一部分的函数中引用对象文字是否有问题 它似乎工作得很好 但我想确保没有其他影响 这是我正在谈论的一个例子 代替 var obj key1 it key2 function return this key1 works alert