使变量成为一个具有属性的对象?

时间:2017-09-17 17:03:12

标签: javascript

我想做的是这样的事情:

var num = Math.round(Math.random() * 3);

所以假设num结果为3,我想在其上添加一个方法并调用它像

num.lighten()

但是num必须是3,我想到了这样的事情:

var randomNum = Math.round(Math.random() * 3)
    randomNum = { lighten: () => "hello world" } // it gets override

或类似的东西,为随机生成的数字分配方法:

var  Math.round(Math.random() * 3) = { lighten: () => "hello world" }

我想把它称为

3.lighten()

1 个答案:

答案 0 :(得分:4)

您可以使用Number对象执行此操作:



var num = new Number(Math.round(Math.random() * 3));
num.lighten = function() {
    console.log("hello world, my value is " + this);
};
num.lighten();
var numPlus3 = num + 3;
console.log("num plus 3 is " + numPlus3);




请注意,num现在是一个对象,而不是一个原始数字。但是如果你在计算中使用它,将使用原始值。

如果您想为所有号码执行此操作,那么您可以在lighten添加Number.prototype功能。由于存在碰撞的风险,我们常常不鼓励将功能添加到原型中,因此我根本不会在库中执行此操作,并且在应用程序中执行此操作之前会非常努力。但这就是看起来的样子:



// Once, in your init
Object.defineProperty(Number.prototype, "lighten", {
  value: function() {
    console.log("hello world, my value is " + this);
  }
});

// Example of use
var num = new Number(Math.round(Math.random() * 3));
num.lighten();




但同样,在扩展内置原型之前要认真思考。如果你这样做:

  • 永远不要在图书馆代码中与您共享
  • 仅添加不可枚举的属性(使用Object.defineProperty
  • 请注意,随着JavaScript标准库的发展,与后来添加的功能发生冲突的可能性