在 JavaScript 中为属性添加别名

2024-01-04

我认为这很简单

有没有一种简单的方法来添加属性的辅助名称(我认为这是特定于字符串的 - 我不确定),即

c = length // this line pseudo code

'hello world'.length // returns 11
'hello world'.c      // this line is pseudo code, meant to return 11

在上面的示例中,为属性长度创建了一个别名。这可以用 JavaScript 实现吗?


1. 带括号表示法

With 括号表示法 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors#Bracket_notation,您可以像这样访问该属性:

'hello world'[c]

这与做同样的事情'hello world'.length if c is 'length'作为字符串。

var c = 'length';
console.log('hello world'[c]);

唯一的区别是该属性是一个字符串。括号表示法是一个属性访问器。

2. With Object.defineProperty()

现在如果你想要一个别名:

Object.defineProperty(String.prototype, 'c', {
    get: function() {
        return this.length;
    }
});

console.log("hello world".c);

以上用途Object.defineProperty https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty为现有对象定义属性,String 的prototype目的。这样,字符串的所有实例都将具有这个新属性。根据文档:

The Object.defineProperty()方法直接在对象上定义新属性,或修改对象上的现有属性,并返回该对象。

Syntax

Object.defineProperty(obj, prop, descriptor)

Where obj是被修改的对象,prop是新的或现有的财产,并且descriptor是新的或现有属性的描述符。

因此,上面定义了对象的属性String.prototype,有名字c。它的描述符是一个 get 函数,返回长度this。在上面的例子中,this引用字符串,因此它返回字符串的长度。您可以阅读有关吸气剂的更多信息here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get.


还可以通过更改为适用的原型来定义更多类型(obj),例如使用Object.prototype反而。但是,这存在潜在的问题,因为尝试返回this.length在一个物体上without长度属性将返回未定义,如图所示here https://jsfiddle.net/v0Lv1org/1/。您还可以使用Object.defineProperties https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties一次定义多个属性。

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

在 JavaScript 中为属性添加别名 的相关文章

随机推荐

  • 在 equals 检查中避免 NullPointerException 的干净方法

    我有一个地址对象 我想为其创建 equals 方法 我可以通过执行类似以下操作 稍微缩短一点 来使这变得非常简单 public boolean equals Object obj if this obj return true if obj
  • NSManagedObject的hasChanges为true,而changedValues为空

    我正在尝试观察个人NSManagedObject变化于NSManagedObjectContextWillSaveNotification void managedObjectContextWillSave NSNotification n
  • 在 VS 2015 和 VS 2013 上运行同一段代码时出现问题

    在 Visual Studio 2013 和 2015 中运行一段代码时 我得到两种不同的结果 在 Visual Studio 2015 上 我得到一个 NullReference 在 2013 年 它按应有的方式工作 Visual Stu
  • 将 JSON NSData 转换为 NSDictionary

    我正在使用 Web 服务的 API 服务 在他们的描述中写道 他们发送 JSON 数据 在我看来 这些数据也与我从中得到的响应相匹配 这是我从 NSURLConnection Delegate connection didReceiveDa
  • 如何创建类的ArrayList?

    如何将一堆类添加到ArrayList
  • 仅使用静态多态性的异构容器

    我的目标是实现一个容器 这里是一组堆栈 每种类型一个 它同时接受许多不同类型的对象 使用 void 指针 或所有存储类型的公共基类 和运行时类型标识 RTTI 在运行时执行此操作非常简单 由于容器将保存的所有类型在编译时都是已知的 因此可能
  • 如何使用 MailApp 在电子邮件中包含内嵌图像

    我有一个简单的 MailApp 来发送 HTML 格式的文本 我的小问题是 如何在该文本中插入内嵌图像 例如 我想为荷兰语文本添加荷兰国旗 为法语内容添加法国国旗 我认为只使用 HTML 代码就可以完成这项工作 但可惜的是 没有这样的运气
  • 更改引荐来源网址的值[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Javascript 中手动设置 REFERER 标头 https stackoverflow com questions 9580575 how to manually set refere
  • 像工具一样的行为:自定义视图中的文本?

    我有一个自定义视图 布局中有两个文本视图 我们来叫一个key和另一个value 所以你知道怎么做TextView有这个吗
  • 如何从 Minecraft 编辑 .mca 文件?

    介绍 我想将我的各个 Minecraft 世界合并成一个世界 这似乎是一个相对容易的壮举 但随着我的研究 它演变成需要制作一个自定义程序 奋斗 我首先移动区域文件并将它们合并到一个区域文件夹中 这似乎是显而易见的解决方案 而且几乎有效 注意
  • 如何在Plone 5上自定义folder_contents?

    我在 Plone 5 上 我想修改默认显示的列数 folder contents 如果我没记错的话 整个table是一种在相应标签上使用相当大的 JSON data xxx 参数进行初始化的模式 那么 我应该深入研究 JSON 还是将注意力
  • 使用 jQuery 绘制动画线条

    我想使用 jQuery 来创建就像用隐形笔绘制线条图的效果 有点像这样 http d2fhka9tf2vaj2 cloudfront net tuts 152 QTiPad Milestones JavaScriptWebsite html
  • 如何修复 facebook Messenger-checkbox 的 CSP 问题

    我正在努力使Facebook Messenger 复选框 https developers facebook com docs messenger platform plugin reference checkbox plugin工作 我已
  • SKLabelNode没有透明背景

    您好 我在 SKLabelNode 上使用自定义字体 我可以设置字体颜色 但是还可以 但是文本的内部部分是透明的 例如 有什么方法可以将这种颜色设置为白色吗 到目前为止我的代码 scoreLabel fontColor SKColor co
  • 发布集合和 ModelState

    我的 MVC 应用程序中有一个问题 我不确定如何解决 或者我是否以错误的方式解决它 我有一个控制器 视图 它在带有复选框的网格中显示项目列表 当这些项目发布到我的控制器时 我想根据传入的 id 从数据库中删除行 该视图看起来像这样 for
  • 强制 IE9 使用浏览器模式而不是兼容模式

    我在用 in head标签 但是 当我在 IE9 上运行我的应用程序时 它使用浏览器模式 IE 9 紧凑视图 我希望我的应用程序仅使用浏览器模式 IE9 not 兼容视图 我意识到我在这方面有点晚了 但这是我使用过的并且它对我有用 确保这是
  • html5画布中的“擦除”

    我在 html5 canvas 中有一个涂鸦应用程序 我正在尝试找出实现橡皮擦控件的最佳方法 第一个冲动只是让橡皮擦绘制背景颜色 白色 但这是有问题的 因为如果用户将图像或另一层移动到他们之前擦除的位置 他们会在擦除的位置看到白色绘图 理想
  • FetchXml 中的左连接?

    如何使用 FetchXml 进行左连接 考虑一个简单的 SQL 查询 如下所示 select person name address city from person left join address on person addressi
  • QToolTip 中包含的变量不会自动更新

    我在 QLineEdit 上有一个 QToolTip 并且工具提示包含文本中的变量 工具提示代码包含在 init h 文件中 问题是工具提示中的变量值在程序运行中发生更改时不会自动更新 例如 我将鼠标悬停在行编辑上 值会显示在工具提示中 我
  • 在 JavaScript 中为属性添加别名

    我认为这很简单 有没有一种简单的方法来添加属性的辅助名称 我认为这是特定于字符串的 我不确定 即 c length this line pseudo code hello world length returns 11 hello worl