Перегрузка арифметических операторов в JavaScript?

Если параметр передается значением (и не ссылка), обычно нет большого различия, объявляется ли параметр как константа или не (если это не содержит ссылочного участника - не проблема для встроенных типов). Если параметр является ссылкой или указателем, обычно лучше защитить, сослался/указал на память, не сам указатель (я думаю, что Вы не можете сделать саму ссылку константа, не, что это имеет значение, хотя Вы не можете изменить рефери). Это кажется хорошей идеей защитить все, что Вы можете как константа. Можно опустить его без страха перед деланием ошибки, если параметрами являются просто ПЕРЕХОДНЫЕ ПРИСТАВКИ (включая встроенные типы) и нет никакого шанса того, что они изменялись далее вдоль дороги (например, в примере bool параметр).

я не знал о .h/.cpp различии в объявлении файла, но оно действительно имеет некоторый смысл. На уровне машинного кода ничто не "константа", поэтому если Вы объявляете функцию (в.h) как неконстанта, код совпадает с, если Вы объявляете его как константу (оптимизация в стороне). Однако это помогает Вам включить в список компилятор, что Вы не измените значение переменной в реализации функции (.ccp). Это могло бы прибыть удобное в случай, когда Вы наследовались интерфейсу, который позволяет изменение, но Вы не должны изменяться на параметр для достижения необходимой функциональности.

68
задан Peter McG 29 October 2009 в 05:02
поделиться

3 ответа

Насколько мне известно, Javascript (по крайней мере, в том виде, в котором он существует сейчас) не поддерживает перегрузку операторов.

Лучшее, что я могу предложить, - это метод класса для создания новых объектов квот из нескольких других. Вот краткий пример того, что я имею в виду:

// define an example "class"
var NumClass = function(value){
    this.value = value;
}
NumClass.prototype.toInteger = function(){
    return this.value;
}

// Add a static method that creates a new object from several others
NumClass.createFromObjects = function(){
    var newValue = 0;
    for (var i=0; i<arguments.length; i++){
        newValue += arguments[i].toInteger();
    }
    return new this(newValue)
}

и используйте это как:

var n1 = new NumClass(1);
var n2 = new NumClass(2);
var n3 = new NumClass(3);

var combined = NumClass.createFromObjects(n1, n2, n3);
36
ответ дан 24 November 2019 в 14:19
поделиться

К сожалению, нет.

Для резервных вариантов, если вы упорядочили возвращаемые значения, вы можете использовать цепочку методов

var q4 = q1.plus(p2).plus(q3);
20
ответ дан 24 November 2019 в 14:19
поделиться

Второе предложение:

var q4 = Quota.add(q1, q2, q3);
7
ответ дан 24 November 2019 в 14:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: