можно закодировать в JavaScript, как следующее:javascript, может ли переменная быть значением, а также функцией?
var foo = function(n) { //magic codes };
var bar = foo(2);
bar + 2 // result: 4
bar(2) // result: 4
bar(2)(2) // result: 6
можно закодировать в JavaScript, как следующее:javascript, может ли переменная быть значением, а также функцией?
var foo = function(n) { //magic codes };
var bar = foo(2);
bar + 2 // result: 4
bar(2) // result: 4
bar(2)(2) // result: 6
Переменная может содержать только одно значение. Это значение может быть функцией.
Объект может иметь метод toString()
, который можно взломать, чтобы приблизиться к тому, что вы пытаетесь сделать.
function myFactory(value) {
function myFunction(add) {
return myFactory(value + add);
}
myFunction.toString = function() {
return value;
};
return myFunction;
}
var bar = myFactory(2);
console.log(bar + 2);
console.log(bar(2));
console.log(bar(2)(2));
Это, конечно, ужасно.
Карринг может быть сделано в Javascript, возвращая функцию. По умолчанию переменные могут быть либо значениями (буквальными, либо результатами функций), либо декларациями функций.
function add(number) {
return function(number2) {
return number + number2;
}
}
console.log(add(5)(6));
Есть способы достичь того, что вы описали bar + 2
, но это нетрадиционный, и по-моему, вы не должны использовать их в JavaScript.
'add + 2' не даст' 4', так как вопрос задает вопрос код. – Quentin
Я был вдохновлен ответ Quetin и нашел valueOf свойство
var foo = function(n) {
var fn = function(x) {
return foo(n + x);
};
fn.valueOf = function() {
return n;
};
return fn;
}
var bar = foo(2);
console.log(bar + 2 === 4, bar);
console.log(bar(2) === 4, bar(2));
console.log(bar(2)(2) === 6, bar(2)(2));
Я признаю результаты журнала действительно выходит странно, но это работает, как предполагалось.
для 'bar + 2 = 4', вам придется перезаписать' bar.toString', чтобы он возвращал '2', но не похож на хорошую идею. – Kaiido
Вы можете, посмотрите эту статью http://www.2ality.com/2011/12/fake-operator-overloading.html –