Почему в этом случае цепочки встроенных методов JavaScript не используются круглые скобки

Я ссылаюсь на этот ответ: /questions/24900662/poluchit-naimenshee-znachenie-iz-massiva-v-javascript/24900685#24900685

    Array.min = function( array ){
    return Math.min.apply( Math, array );
};

Почему метод min из Math не требует скобок, прежде чем.apply() будет прикован к нему? Мое понимание этого синтаксиса заключается в том, что.min без скобок является свойством.

Моя путаница возникает из-за того, что большая часть моего опыта работы с цепочками связана с использованием jQuery с кодом, подобным следующему:

    jQuery("div").hide("slow", function(){
      jQuery(this)
      .addClass("done")
      .find("span")
      .addClass("done")
      .end()
      .show("slow", function(){
        jQuery(this).removeClass("done");
      });
    });

источник: http://ejohn.org/blog/ultra-chaining-with-jquery/

2 ответа

Решение

.apply это не цепной вызов, это свойство каждого Function, потому что каждая функция наследуется от Function.prototype,

То есть дано:

var m = Math.min;

затем m.apply просто доступ к .apply свойство этой функции.

Прикрепление () имя свойства принимает значение этого свойства и пытается вызвать его как функцию.

Функции являются объектами, поэтому могут иметь свои собственные свойства.

apply является собственностью min (и любая другая) функция (т.е. это не свойство возвращаемого значения вызова min).

Это не имеет ничего общего с цепочкой методов, где возвращаемое значение метода является объектом, для которого был вызван метод.

Другие вопросы по тегам