Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как правильно клонировать объект, чтобы он оставался и при удалении исходника (https://javascript.ru/forum/misc/35278-kak-pravilno-klonirovat-obekt-chtoby-ostavalsya-i-pri-udalenii-iskhodnika.html)

Deff 06.02.2013 03:13

Цитата:

Сообщение от Дзен-трансгуманист
А как вы собираетесь клонировать замыкания, а?

Пока не думал - разбираюсь
Начали с чистых объектов... потом вложенные, потом функции
--------------------------------------------------------------
Суть в том - что брауз как то клонирует и фреймворк тоже

Deff 06.02.2013 04:22

Обман зрителя с псевдоклонированием фреймворка

1. Ставим скрипт библиотеки во фрейм,
2. ...якобы клонируем frame1.jQuery
3. Удаляем фрейм вместе со скриптом (можно наблюдать удаление - cпецом

Запускаем любые jQuery функции (тут считываю bоdy.html() ( Заметим что фрейма нет)
//Чисто коперфильд (Сам заю, что вру и где
//а хочется реально!
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>

<script>

function TestLibFrame() { // 

  function Clone(a) {
    return a;
  }

  window.docThis = frame1.parent.document;
  window.$$ =  Clone(frame1.jQuery); //...якобы клонируем frame1.jQuery
  delete frame1.jQuery;//alert(frame1.jQuery); //...удаляем объект frame1.jQuery

  $$("iframe[name='frame1']",docThis).remove(); //Удаляем фрейм...

  var str = 'Запускаем jQuery на  странице без библиотеки:';
  alert(str +'\n\n' + $$("html",docThis).html());

}  


function Funk0(aa) {
var a='Cтавим javascript - библиотеку во фрейм'
var iframe = aa
var iframeDoc = iframe.contentWindow.document;
var b = iframeDoc.createElement('div');
b.innerHTML=a;//alert(b.innerHTML)
iframeDoc.body.appendChild(b);
var s = iframeDoc.createElement('script');
s.setAttribute("type","text/javascript");
s.src = "http://yandex.st/jquery/1.4.4/jquery.min.js";
//s.setAttribute("onload","parent.TestLibFrame()");
s.onload = function () {setTimeout("TestLibFrame()",4000);}
b.appendChild(s);
}

</script>
<iframe name=frame1 onload="Funk0(this)"></iframe>


</body>
</html>


Часовой пояс GMT +3, время: 17:18.