Можно ли использовать функции с суб-методами? - PullRequest
2 голосов
/ 18 января 2012

Такого рода вещи работают в JavaScript

function main() {
    return 1;
}
main.sub = function () {
    return 2;
};

main();     // 1
main.sub(); // 2

и кажется полезным для таких вещей, как

function props() {
    return { color: props.color(), size: props.size() };
}
props.color = function () {
    // calculate and return color
};
props.size = function () {
    // calculate and return size
};

чтобы у вас был простой способ вытянуть объект всех реквизитов, используя prop(), но если вам нужен только один, вы можете вызвать его напрямую. Это тип установки в порядке?

Ответы [ 3 ]

2 голосов
/ 18 января 2012

Даже если это абсолютно законно, я бы сказал, что это неправильное использование под-методов. Это путает функцию с возвращаемым значением указанной функции.

Я бы сказал, что правильное использование подметодов внутри функций - это когда вы хотите добавить метаданные для функции. Допустим, вы хотите установить свойство для функции, например документацию, или хотите, чтобы оно было запутано. Затем вы можете установить свойство для функции вместо базового объекта.

Несмотря на то, что ваше использование может сэкономить некоторые записи, это делает чтение кода намного сложнее, ИМХО. Вы должны всегда стремиться к удобству чтения, а не письма.

1 голос
/ 18 января 2012

Как правило, это не очень хорошая практика:

звонить: props.color(); будет делать то же самое, что и звонить props().color.

Что было бы лучше, так это было бы следующим образом:

var props = function() {
 var theColor = function() {
  // calculate the color
 };

 var theSize = function() {
  // calculate the size
 };

 return {
  color: theColor(),
  size: theSize()
 }
}

var someprops = new props();

Вы можете вместо того, чтобы, например, theColor() в качестве объекта для цвета, вы можете оставить его как функцию: Таким образом, возвращаемое значение будет

return {
 color: theColor,
 size: theSize
}

Разница в том, что props.color == "function", тогда как в предыдущем примере props.color равнялся бы результату функции.

1 голос
/ 18 января 2012

Это выглядит полезным, но не очень очевидно, что происходит при его использовании.

Выражение props.color() возвращает то же самое, что и выражение props().color, но производительность отличается от последнейтакже вычисляет другие свойства, которые затем отбрасываются.Использовать функцию легко, не замечая этого, поэтому вам следует рассмотреть возможность использования подхода, при котором использование более четко показывает, что на самом деле происходит в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...