ReturnTrue и returnFalse в источнике jQuery
Я не могу не заметить, что в исходном коде jQuery есть две, казалось бы, бесполезные функции (для v1.9.1, строка 2702 и строка 2706):
function returnTrue() {
return true;
}
function returnFalse() {
return false;
}
Какие из них часто вызываются в jQuery. Есть ли причина, по которой они не просто заменяют вызов функции логическим true
или false
?
Ответы
Ответ 1
он использовался следующим образом:
stopImmediatePropagation: function() {
this.isImmediatePropagationStopped = returnTrue;
this.stopPropagation();
}
здесь isImmediatePropagationStopped
- это запрос метод. используется как event.isImmediatePropagationStopped()
конечно, вы можете определить метод экземпляра, например:
event.prototyoe.isImmediatePropagationStopped = function() { return this._isImmediatePropagationStopped };
stopImmediatePropagation: function() {
this._isImmediatePropagationStopped = true; //or false at other place.
this.stopPropagation();
}
но вы должны ввести новое свойство экземпляра _isImmediatePropagationStopped
для сохранения состояния.
с помощью этого трюка вы можете отключить кучу свойств экземпляра для наличия истинного/ложного состояния здесь, например _isImmediatePropagationStopped
, _isDefaultPrevented
и т.д.
так что, на мой взгляд, это всего лишь вопрос стиля кода, а не правильный или неправильный.
PS: методы запроса в событии, такие как isDefaultPrevented
, isPropagationStopped
, isImmediatePropagationStopped
, определены в DOM-событии уровня 3 sepc.
spec: http://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/events.html#Events-Event-isImmediatePropagationStopped
Ответ 2
Если свойство объекта, аргумент функции и т.д. ожидает function
, вы должны предоставить function
не a boolean
.
Например, в ванильном JavaScript:
var a = document.createElement("a");
a.href = "http://www.google.com/";
/*
* see https://developer.mozilla.org/en-US/docs/DOM/element.onclick
* element.onclick = functionRef;
* where functionRef is a function - often a name of a function declared
* elsewhere or a function expression.
*/
a.onclick = true; // wrong
a.onclick = returnTrue; // correct
a.onclick = function() { return true; }; // correct
Кроме того, запись:
someProperty: returnTrue,
Удобнее, чем писать:
someProperty: function(){
return true;
},
Тем более, что их называют довольно часто.