Javascript - 创建一个模仿原始数据类型的新对象

时间:2017-02-19 08:30:18

标签: javascript object constructor

我需要在Javascript中创建一个新的Object,它应返回一个数字值。 我的期望是:



var Currency = function(args) {
    return args*Currency.prototype.multiple;
}

Currency.prototype.multiple = 1000;
Currency.prototype.Locale='en-IN';
Currency.prototype.currency= 'INR';
Currency.prototype.paise = function(){
    return  (Currency.prototype.args*Currency.prototype.multiple);
};
Currency.prototype.show = function(){
    return (this.valueOf()/Currency.prototype.multiple).toLocaleString(Currency.prototype.Locale, { style: 'currency', currency: Currency.prototype.currency });
};

var num = new Currency(5);
console.log(num) //5000




但我得到的是一个对象

currency{}

如何实现我的预期结果?

1 个答案:

答案 0 :(得分:0)

使用new创建实例时,它会自动从构造函数返回新创建的对象。除非您确定,否则不建议覆盖它。另请注意,如果返回非对象(如数字),它将覆盖该对象并返回新创建的对象。如果要覆盖它,则必须返回一个对象本身,例如return {value: args*Currency.prototype.multiple},但是您必须添加逻辑以保持对新创建的对象的引用,以便稍后使用,例如访问currency。 / p>

在您的情况下,您可以为每种货币设置value并在构造函数中设置它,稍后您可以使用myObject.value

进行访问

要在用作数字时使用它作为数字,您可以使用valueOf作为@Xufox提及

  

使用前面的代码(valueOf),任何时候类型的对象   myNumberType用于将其表示为a的上下文中   原始值,JavaScript自动调用定义的函数   在前面的代码中。

var num = new Currency(5);
console.log(num+100 + num.currency);//5100INR



var Currency = function(args) {
    this.value = args*Currency.prototype.multiple;
}

Currency.prototype.multiple = 1000;
Currency.prototype.Locale='en-IN';
Currency.prototype.currency= 'INR';
Currency.prototype.paise = function(){
    return  (Currency.prototype.args*Currency.prototype.multiple);
};
Currency.prototype.show = function(){
    return (this.valueOf()/Currency.prototype.multiple).toLocaleString(Currency.prototype.Locale, { style: 'currency', currency: Currency.prototype.currency });
};

Currency.prototype.valueOf = function(){
  return this.value;
}

var num = new Currency(5);
console.log(num.value + num.currency) //5000
console.log(num+100 + num.currency);
var num2 = new Currency(50);
console.log(num2.value + num2.currency) //5000