Можно ли реализовать член, который возвращает функцию и число в JavaScript? - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь смоделировать следующее:

foo.bar // --> 3
foo.bar.baz() // --> 7

Я пытался использовать прокси, геттеры, прототипы ...

Можно ли это сделать? Если да, то как?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вы можете (до некоторой степени) сделать это с valueOf. Тем не менее, вам нужно принуждение, чтобы вызвать valueOf

let foo = {
   bar: {
      valueOf: () => 3,
      baz: () => "baz"
   }
}
foo.bar.baz() //"baz";
+foo.bar //3
0 голосов
/ 31 октября 2018

Возможно, это не то, что вы ищете, но один (глупый) вариант - мутировать Number.prototype:

const foo = {
  bar: 3
};
Number.prototype.baz = () => 7;
console.log(foo.bar);
console.log(foo.bar.baz());

Помимо этого взлома, я почти уверен, что то, что вы ищете, невозможно, потому что в противном случае foo.baz должен был бы быть оценен как объект , а не число, в вторая строка, противоречащая условию первой строки.

...