2017-02-19 4 views
0

Мне нужно создать новый объект в Javascript, который должен вернуть числовое значение. Что я ожидаю:Javascript - создайте новый объект, который имитирует примитивный тип данных

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{} 

Как добиться моего желаемого результата?

+0

Просьба предоставить больше контекста. Что именно ты пытаешься сделать? –

+1

Ваш код немного странный, вы можете избежать создания объекта, если опустить ключевое слово 'new'. Просто позвоните «Валюта», как обычная функция. – Scarysize

+0

@FelixKling Я пытаюсь создать новый тип данных «Валюта», который имеет свои собственные свойства. Валюта всегда число, но ее нужно умножить на 1000. Я не хочу получать доступ к значению функции, используя obj.value. Вместо этого я хочу получить доступ к его значению просто obj (Подобно примитивным типам данных) – Avinash

ответ

0

При создании экземпляра с new он автоматически возвращает вновь созданный объект из конструктора. Не рекомендуется переопределять его, если вы не уверены в этом. Также обратите внимание, что если вы вернете не объект, как число, он переопределит это и просто вернет вновь созданный объект. Если вы хотите переопределить это, вам придется возвращать сам объект, например return {value: args*Currency.prototype.multiple}, но вам нужно добавить свою логику, чтобы ссылаться на ваш вновь созданный объект, который будет использоваться позже, например, получить доступ к currency.

В вашем случае, вы можете просто иметь value для каждой валюты и установить его в конструктор, который можно позже доступ с myObject.value

Чтобы использовать его как число, когда оно требует использования в качестве числа можно использовать valueOf в качестве @Xufox упоминается

с предыдущим кодом (valueOf) в месте, в любое время объект типа myNumberType используется в контексте, где он должен быть представлен в виде примитивного значения, 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

+0

Спасибо :) Я хочу, чтобы объект вел себя как родной тип данных. т. е. вместо «num.value» для доступа к моему значению я хочу, чтобы «num» сам хранил мои данные (например, примитивные типы данных). – Avinash

+1

@Avinash Вы можете определить свойство функции valueOf 'на' prototype', которое возвращает значение. 'num' будет по-прежнему оставаться объектом, но вы можете использовать его как число. – Xufox

+0

@Xufox Это хорошая идея :) – sabithpocker

Смежные вопросы