ну и что ты доказал? По прежнему стоп у булевого выражения не вызывается, вызывается просто лямбда функция. Типа воркэраунд такой замутил, но это ведь не решение проблемы и не открытие кому-то глаз на что-то.
раскрыть ветку (20)
Это хороший пример over programminga.
Мол смотрите как я могу, хотя адекватный программист спросил бы себя. А нахуя?)
p.s. Да и javascript, всего лишь сценарный язык)
Мол смотрите как я могу, хотя адекватный программист спросил бы себя. А нахуя?)
p.s. Да и javascript, всего лишь сценарный язык)
раскрыть ветку (6)
твои слова напомнили еще один исторический пример овер программинга ))
http://thedailywtf.com/Articles/The_Brillant_Paula_Bean.aspx
http://thedailywtf.com/Articles/The_Brillant_Paula_Bean.aspx
раскрыть ветку (4)
эммм... об отсутствии строгой типизации, вследствие чего люди периодически творят там совершенную жесть? )
раскрыть ветку (2)
раскрыть ветку (1)
ну если хочешь сделать хорошо, а не сделать просто чтобы сделать. В таком случае да - стараешься не допускать ошибок.
Доказал, что код в начале поста не обязательно является нерабочим. Автор это и собирался доказать, как я понял.
но ведь смысл был не именно в вызывании метода у булевого выражения. Да, у чисто булевой функции его не получится вызвать. Смысл был доказать что код - рабочий)
раскрыть ветку (9)
ну так с подобными костылями любой код можно рабочим сделать ) и если еще раз посмотришь на то, что писал @Prototik - "я сомневаюсь что у примитивов есть метод/функция/процедура", на что ты сказал, что попробуешь опровергнуть такие предрассудки. Т.е ты хотел изначально доказать то, что у примитивов могут быть ф-ции/методы/процедуры, а не что код такого вида с определенными дополнениями может работать )
раскрыть ветку (8)
Когда он говорил это, он основывался на том, что Sad() - примитив, потому что условие срабатывает при сравнении без приведения типов. (===)
Он уже только на основании этого сделал вывод что Sad() - это примитив. И что остальной код - неверен. Но ведь это не так? Sad() - не примитив, и остальной код тогда получается верным.
Смысл был в том, что он изначально предполагал неверность кода, не пытаясь посмотреть на него со всех сторон. А мой пост - не попытка доказать что у примитивов возможны методы, а попытка сказать что не стоит делать конкретные выводы, не рассмотрев все с каждого угла зрения
Он уже только на основании этого сделал вывод что Sad() - это примитив. И что остальной код - неверен. Но ведь это не так? Sad() - не примитив, и остальной код тогда получается верным.
Смысл был в том, что он изначально предполагал неверность кода, не пытаясь посмотреть на него со всех сторон. А мой пост - не попытка доказать что у примитивов возможны методы, а попытка сказать что не стоит делать конкретные выводы, не рассмотрев все с каждого угла зрения
раскрыть ветку (7)
и по поводу "Но ведь это не так? Sad() - не примитив, и остальной код тогда получается верным. " - даже в твоем коде sad() всегда возвращает примитив. а sad().stop() к нему не имеет никакого отношения, т.к тут уже лямбда дергается. Так что sad() как был примитивом, так и остался, иначе бы sad()===true никогда не было бы true
раскрыть ветку (5)
А если бы Sad() вернул объект он бы уже не был примитивом. На самом деле тут нет строго возвращаемого типа у функции, поэтому её нельзя назвать "строго примитивом"
раскрыть ветку (4)
нельзя назвать строго примитивом - верно, ноооо, если я не ошибаюсь, в случае, если sad() будет не примитивом, тождественное равенство sad()===true никогда не будет верным, вроде как... Т.е код подразумевает то, что sad() будет возвращать примитивный булев (а в жс другие есть?)
раскрыть ветку (3)
вообще произойдет автоматическое приведение типов, поэтому если вернется булеан, объект, строка(не любая), число (!= 0) то сработает условие
раскрыть ветку (2)
это же тождественное равенство, а не обычное. В таком случае проверяется значение и тип. Т.е 'true'===true будет false.
раскрыть ветку (1)
Учите матчасть
var bool = true;
Boolean.prototype.stop = function(){
console.log('Im work!');
}
function sad () {
return bool;
}
if(sad() === true){
sad().stop();
}
var bool = true;
Boolean.prototype.stop = function(){
console.log('Im work!');
}
function sad () {
return bool;
}
if(sad() === true){
sad().stop();
}
