【问题标题】:JS: how to define properties on numeric variables [duplicate]JS:如何定义数值变量的属性
【发布时间】:2015-10-28 10:12:47
【问题描述】:

我很少有 number 类型的变量(或者同样是字符串)。 我想为这些变量添加一些元数据。

当我尝试使用 Object.defineProperty(myvar, "prop", {/*getter & setter*/}) 时,它会给出一个错误,即 myvar 不是对象。

如何使用 getter 和 setter 方法在非对象上定义属性?

我不想向Number.prototype 添加任何内容,因为我只希望在少数变量上使用这些属性。

【问题讨论】:

  • 不会将对象放入数组并使用数字索引作为处理此问题的常用方法吗?
  • 如果您真的坚持属性,请使用 Number 和 String 对象而不是原语。不,您不能根据定义将属性放在非对象上。

标签: javascript defineproperty


【解决方案1】:

您可以通过原型继承来做到这一点。 像这样使用Number.prototype:

var proto = Object.create(Number.prototype);
function MyNumber() {
}
MyNumber.prototype = proto;
MyNumber.prototype.constructor = MyNumber;
MyNumber.prototype.someOwnMethod = function () {
}
// and so on
var myVar = new MyNumber();
Object.defineProperty(myvar, "prop", {/*getter & setter*/});

您将在原型中获得一个 Object 以及 Number 方法。

或者如果您不需要任何自己的方法,只需使用 Number 构造函数而不是数字文字。

var myVar = new Number();
Object.defineProperty(myvar, "prop", {/*getter & setter*/});

字符串也一样:

    var myVar = new String();

【讨论】:

  • 我正在编写的函数将 JSON 对象作为参数,并且此 JSON 具有不同的原始类型属性。我想在不更改这些属性的数据类型或向原型中添加任何内容的情况下将元数据添加到这些属性中。由于无法将元数据添加到原始类型,现在我正在我的方法中创建一个新的 JSON 对象,它具有相同的输入参数结构,但对于值,我使用原始类型的等效对象并返回这个新的 JSON 对象从我的方法。使输入对象保持原样。
猜你喜欢
  • 2017-09-13
  • 2017-05-19
  • 2011-09-02
  • 2016-09-10
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多