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一次定义多个属性。