Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

В контексте чего живет Array? (Ex_Soft)
Author Message
Ex_Soft
Участник форума



Joined: 28 Apr 2005
Posts: 138
Карма: -4
   поощрить/наказать


PostPosted: Thu May 28, 2009 10:22 am (написано за 2 минуты 45 секунд)
   Post subject: В контексте чего живет Array?
Reply with quote

Code (JavaScript): скопировать код в буфер обмена
<script>
function foo(arr)
{
        alert(arr instanceof Array);
}
</script>
<iframe src="child.html"></iframe>
Code (JavaScript): скопировать код в буфер обмена
<script>
window.parent.foo([1,2,3]);
</script>
arr.length && arr[i] - ЭстЪ, а, вот arr instanceof Array - false. Но
Code (JavaScript): скопировать код в буфер обмена
<script>
window.parent.foo(new window.parent.Array(1,2,3));
</script>
- сухо...
Это так д.б.?
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu May 28, 2009 2:41 pm (спустя 4 часа 19 минут; написано за 11 секунд)
   Post subject:
Reply with quote

Ex_Soft,
Code (JavaScript): скопировать код в буфер обмена
function instance(a) {
   alert(a instanceof Array);
}

instance([1, 2, 3]); //true
instance(new Array()); //true
 
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 269
   поощрить/наказать

Location: Питер

PostPosted: Thu May 28, 2009 3:32 pm (спустя 51 минуту; написано за 4 минуты 56 секунд)
   Post subject:
Reply with quote

Ну, судя по всему "оно так и должно быть". При работе с фреймами параллельно запущено N интерпретаторов и хотя меняться данными они могут, но я не уверен что там нет проверки на принадлежность объекта к конкретному глобальному объекту.
Т.е., теоретически, базовый Array везде один и тот же, но на практике они могут быть разными, например иметь различия в прототипах. В этом случае, совершенно точно нельзя говорить что массив из одного фрейма является экземпляром Array из другого...

Примерно так, код не проверял
Code (html): скопировать код в буфер обмена
<script> (december.com/html/4/element/script.html)
Array.prototype.ext = function () {}

function foo(arr) {
        arr.ext(); // тут будет ошибка
}
</script>
<iframe (december.com/html/4/element/iframe.html) src="child.html"> (december.com/html/4/element/.html)</iframe>
Code (html): скопировать код в буфер обмена
<script> (december.com/html/4/element/script.html)
window.parent.foo([1,2,3]);
</script>
Back to top
View user's profile Send private message
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu May 28, 2009 3:33 pm (спустя 52 секунды; написано за 14 секунд)
   Post subject:
Reply with quote

WingedFox меня опередил, но...

Александр Михалицын, Вы упустили момент, что конструктором у Ex_Soft в первом случае выступает Array из iframe src="child.html", а проверяет его на instanceof Array из parent-а. Естественно, что тот Array это не тот Array :) и instanceof дает false

по теме. просто не стоит делать instanceof для того чтобы убедиться что с объектом по ссылке можно работать как с массивом. проверяйте именно те свойства, что Вам реально нужны для работы.
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu May 28, 2009 7:11 pm (спустя 3 часа 37 минут; написано за 19 секунд)
   Post subject:
Reply with quote

dimagolov,
да, действительно, не заметил... ;)
Back to top
View user's profile Send private message Send e-mail
K.Wiolowan
Участник форума



Joined: 22 Feb 2006
Posts: 53
Карма: 11
   поощрить/наказать


PostPosted: Sat May 30, 2009 1:40 am (спустя 1 день 6 часов 29 минут; написано за 2 минуты 56 секунд)
   Post subject:
Reply with quote

Code (JavaScript): скопировать код в буфер обмена
alert(window.Array instanceof window.parent.Array ||window.parent.Array instanceof window.Array ||
   window.Object instanceof window.parent.Object || window.parent.Object instanceof window.Object ||
   window.String instanceof window.parent.String || window.parent.String instanceof window.String ||
   window.Number instanceof window.parent.Number || window.parent.Number instanceof window.Number)
//
 
Back to top
View user's profile Send private message
Ex_Soft
Участник форума



Joined: 28 Apr 2005
Posts: 138
Карма: -4
   поощрить/наказать


PostPosted: Sun May 31, 2009 8:01 am (спустя 1 день 6 часов 20 минут; написано за 23 секунды)
   Post subject:
Reply with quote

тынць (javascript.ru/tutorial/object/inheritance#operator-instanceof)
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML