Почему в этом случае цепочки встроенных методов 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");
});
});
2 ответа
.apply
это не цепной вызов, это свойство каждого Function
, потому что каждая функция наследуется от Function.prototype
,
То есть дано:
var m = Math.min;
затем m.apply
просто доступ к .apply
свойство этой функции.
Прикрепление ()
имя свойства принимает значение этого свойства и пытается вызвать его как функцию.
Функции являются объектами, поэтому могут иметь свои собственные свойства.
apply
является собственностью min
(и любая другая) функция (т.е. это не свойство возвращаемого значения вызова min
).
Это не имеет ничего общего с цепочкой методов, где возвращаемое значение метода является объектом, для которого был вызван метод.