Создание метода преобразования единиц для прототипа номера - PullRequest
1 голос
/ 10 июня 2019

В настоящее время я пытаюсь создать единицу измерения для метрики и английского масштаба в качестве метода для прототипа числа.Вот мой код:

Number.prototype.UnitConversion = function (units){
    switch (units){
        case "Metric":
            this = this/100;
            return this;
        case "English":
            this = this/12;
            return this;
    }
}
var a = 5;
alert(a.UnitConversion("Metric"))

Однако я получаю ошибку неверного аргумента слева.Почему это так?

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

this является неизменным в JavaScript, что означает, что вы не можете переназначить его, см .: этот SO пост . Однако вы можете просто вернуть значение некоторого вычисления, выполненного на нем:

Number.prototype.UnitConversion = function(units) {
    switch (units){
        case "Metric":
            return this/100;
            
        case "English":
            return this/12;
            
        default:
            return;
    }
}
var a = 5;
console.log(a.UnitConversion("Metric"))
0 голосов
/ 10 июня 2019

Это потому, что неожиданное присвоение this. Может быть, попробуйте более читабельное, чистое решение? Как то так:

Number.prototype.UnitConversion = function (units){
    let conversion;
    switch (units){
        case "Metric":
            conversion = this/100;
            break;
        case "English":
            conversion = this/12;
            break;
        //always add a default case
    }

    return conversion;
}
...