<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JS: Как правильно поменять функцию]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=16733</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16733&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JS: Как правильно поменять функцию».]]></description>
		<lastBuildDate>Mon, 27 Dec 2021 22:35:07 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JS: Как правильно поменять функцию]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=151421#p151421</link>
			<description><![CDATA[<p><strong>pmailer1976</strong>, если я верно понял вопрос, то вместо <strong>code</strong> можно передать анонимную функцию в пределах вызова, а можно ссылкой на уже заранее определённую функцию. Ниже пример. От себя добавил небольшие модификации:<br />1) Вместо подмены свойства window &quot;спрятал&quot; setTimeout в анонимной функции внутрь переменной, которая недоступна в остальном коде<br />2) Вызов setTimeout обернул в apply, так как в современных браузерах функция setTimeout имеет более 2-ух параметров: </p><div class="codebox"><pre><code>var timeoutID = window.setTimeout(func, [, delay, param1, param2, ...]);</code></pre></div><p>После указания задержки можно передать параметры, которые должны попасть в функцию вызова.</p><p><a href="https://developer.mozilla.org/ru/docs/Web/API/setTimeout">https://developer.mozilla.org/ru/docs/W … setTimeout</a></p><div class="codebox"><pre><code>
&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta charset=&quot;UTF-8&quot;&gt;
        &lt;script type=&quot;text/javascript&quot;&gt;
        
        (function(){
            // Hiding setTimeout to fn
            var fn = window.setTimeout
            window.setTimeout = function(){
                return fn.apply(this,arguments)
            }
        })();

        // Anonymous call
        var tid = setTimeout(function(){
            alert(&#039;arguments passed to anonymous function: &#039; + Array.prototype.join.call(arguments, &#039;,&#039;));
        },1000,&#039;param1&#039;,&#039;param2&#039;,&#039;param3&#039;)

        // calling predefined function
        function test(){
            alert(&#039;function test called with params: &#039; + Array.prototype.join.call(arguments, &#039;,&#039;));
        }

        var tid = setTimeout(test,1000,&#039;param1&#039;,&#039;param2&#039;,&#039;param3&#039;)

        &lt;/script&gt;
    &lt;/head&gt;
&lt;/html&gt;
</code></pre></div><p>P.S Единственное неудобство - возникает проблема с пробросом контекста this при такой конструкции. В той же статье ниже про это рассказано подробнее.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Mon, 27 Dec 2021 22:35:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=151421#p151421</guid>
		</item>
		<item>
			<title><![CDATA[Re: JS: Как правильно поменять функцию]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=150667#p150667</link>
			<description><![CDATA[<p>На первый взгляд, путь правильный, хотя ничего нового к setTimeout пока не добавлено (как я понимаю, что-то предлагается добавить перед return), но может быть и нет, т.к. не совсем ясен вопрос.</p>]]></description>
			<author><![CDATA[null@example.com (Мальчик-гей)]]></author>
			<pubDate>Fri, 19 Nov 2021 20:19:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=150667#p150667</guid>
		</item>
		<item>
			<title><![CDATA[JS: Как правильно поменять функцию]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=150666#p150666</link>
			<description><![CDATA[<p>Здравствуйте!<br />Подскажите как правильно подставить другую функцию (другой js код) в <strong><span class="bbu">code</span></strong></p><div class="codebox"><pre><code>return window._setTimeout(code,delay);</code></pre></div><p>Тут перехват запущенного setTimeout</p><div class="codebox"><pre><code>window._setTimeout=window.setTimeout;
window.setTimeout=function(code,delay){
     return window._setTimeout(code,delay);
};</code></pre></div><p>Спасибо</p>]]></description>
			<author><![CDATA[null@example.com (pmailer1976)]]></author>
			<pubDate>Fri, 19 Nov 2021 12:48:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=150666#p150666</guid>
		</item>
	</channel>
</rss>
