gpt4 book ai didi

javascript - 在 JavaScript 中为属性添加别名

转载 作者:行者123 更新时间:2023-12-03 02:21:58 27 4
gpt4 key购买 nike

我认为这相当简单,

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

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。带括号表示法

bracket notation ,您可以像这样访问该属性:

'hello world'[c]

如果 c'length' 作为字符串,则这与 'hello world'.length 执行相同的操作。

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

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

<强>2。使用Object.defineProperty()

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

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

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

上面使用Object.defineProperty为现有对象(String 的 prototype 对象)定义属性。这样,字符串的所有实例都将具有这个新属性。根据文档:

The Object.defineProperty() method defines a new property directly on an object, or modifies an existing property on an object, and returns the object.

Syntax

Object.defineProperty(obj, prop, descriptor)

其中 obj 是要修改的对象,prop 是新的或现有的属性,descriptor 是新的或现有的描述符属性。

因此,上面为对象 String.prototype 定义了一个属性,名称为 c。它的描述符是一个 get 函数,它返回 this 的长度。在上面的示例中,this 引用字符串,因此它返回字符串的长度。您可以阅读有关 setter/getter 的更多信息 here .

<小时/>

还可以通过更改为适用的原型(prototype) (obj) 来定义更多类型,例如使用 Object.prototype 代替。但是,这存在潜在的问题,因为尝试在没有 length 属性的对象上返回 this.length 将返回未定义,如 here 所示。 。您还可以使用Object.defineProperties一次定义多个属性。

关于javascript - 在 JavaScript 中为属性添加别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39431230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com