Javascript объект должен вести себя по-разному, в зависимости от окончания индекса: foo vs. foo () - PullRequest
1 голос
/ 08 июня 2011

Можно ли построить объект таким образом, чтобы он возвращал следующее:

baseObject.foo;   // return a string describing what foo does
baseObject.foo(); // execute the foo function

baseObject.bar;   // bar description
baseObject.bar(); // execute bar

Обновление: Перегрузка метода JavaScript близка, но не совсем то, что я ищу.

Обновление2: jsfiddle (из приведенных ниже решений).

Ответы [ 2 ]

6 голосов
/ 08 июня 2011

Вы можете перезаписать метод функции toString по умолчанию:

baseObject.foo = function () { console.log('executing foo') }
baseObject.foo.toString = function () { return 'This function outputs "executing foo"'; }
4 голосов
/ 08 июня 2011

baseObject.foo должна быть функцией, иначе вы не сможете ее вызвать. Единственное, на что вы можете повлиять, это как эта функция приводится к строке, переопределяя ее метод toString(). По умолчанию toString() возвращает исходный код функции, вместо этого вы можете заставить его возвращать что-то еще.

baseObject.foo = function() {
    // Do something
}
baseObject.foo.toString = function() {
    return "Function does something";
}
alert(baseObject.foo);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...