Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   UpJump: Q&A :) (https://javascript.ru/forum/misc/14421-upjump-q.html)

UpJump 15.01.2011 18:08

UpJump: Q&A :)
 
Здесь я буду держать полезные для меня ссылки:
<noscript>
таблица URL-encoding
Запрет на выделение текста
Утечка памяти в IE
animate
сокращение интервала setInterval() для различных браузеров
почитать
тесты
vml

Где-то видел такой синтаксис.
F = new Function();
F.[[prototype]] = Function.prototype;

так вот что это?
[[prototype]]
Это массив в массиве? Если да то это может быть аналогично?
[prototype[prototype]]

Shaci 15.01.2011 18:12

нет, это не массив в массиве
http://javascript.ru/tutorial/object...herez-prototip

UpJump 15.01.2011 18:17

ага. спс. разобрался

UpJump 17.01.2011 18:44

еще один вопрос. что значит сее выражение?
[object Object]
То что это объект это я понимаю, но почему такой синтаксис, почему object повторяется два раза?

Matre 17.01.2011 19:02

object -это тип
Object -имя констурктора

Aetae 17.01.2011 19:07

alert(window+': \u042f \u0433\u043e\u0440\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 Window!')
alert({}+': \u0410 \u044f \u043e\u0431\u044a\u0435\u043a\u0442... \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442.')

UpJump 17.01.2011 19:18

ага спасибо. интересно

UpJump 17.01.2011 19:25

еще один вопрос наболел. никак не пойму разницу между [[prototype]] и .prototype.
P.S. очевидно нужно было назвать топик как нить иначе. типа МОИ ГЛУБОКИЕ ПОЗНАНИЯ В javascript:D . Короче буду тут очевидно задавать свои дурные вопросы и скромно надеяться на помощь в изучения данного сабжа.

monolithed 17.01.2011 19:31

http://javascript.ru/ecma/part8#_Prototype_

UpJump 17.01.2011 19:41

читал до этого и все равно не понял. [[prototype]] - содержит ссылку одного объекта на другой. А .prototype - откуда брать прототип. Все правильно? Если да то чисто гипотетически
Объект.[[prototype]] = Я_другой_объект
и
Объект.prototype = Я_другой_объект
одно и тоже? Знаю что Объект.[[prototype]] = Я_другой_объект быть не может но все же чисто гипотетически?

x-yuri 17.01.2011 21:25

они ссылаются на один и тот же объект, но доступ к этому объекту ты можешь гарантированно получить только через конструктор. А [[prototype]] - это некое свойство, обозначающее ссылку на прототип из самого объекта. Например, у ff оно называется __proto__, у других браузеров такого нету

if( {}.__proto__)
    alert( {}.__proto__ === Object.prototype )


[[...]] - это детали реализации, которые не обязывают производителей браузеров расшаривать это авторам; может даже пример реализации: в браузере эти моменты могут быть реализованы по-другому

UPD уже только у ie нету __proto__

UpJump 17.01.2011 21:31

спасибо за исчерпывающий ответ. вот кстати накопал полезную инфу в схемах.http://habrahabr.ru/blogs/javascript/108915/ Может кому будет интересно как мне.

UpJump 18.01.2011 13:18

Еще один вопрос от любопытного меня:)
Предположим вот код.
F = function(){
f = function(){}
}
F();
alert(f.__proto__);// Выводит function Empty();

Так вот что это за функция. Из перевода ясно что она пустая. В чем ее смысл, почему к примеру не undefined?
И куда ведет в данном случае __proto__ ? У функции F(); он идет к
Function.prototype == Function.__proto__
, это понятно. А с f(); неясно:blink:

x-yuri 18.01.2011 13:32

F = function(){
    f = function(){}
}
F();
alert(f.__proto__ === Function.prototype);

UpJump 18.01.2011 13:50

спс.

UpJump 18.01.2011 13:59

То есть у Function объект-прототип не является [object Object]. Что же тогда это за пустая функция function Empty()? Ну или хотя бы где можно про нее прочесть?

x-yuri 18.01.2011 14:20

сделай так, чтобы я увидел эту твою function Empty()

UpJump 18.01.2011 14:56

F = function(){
	f = function(){}
}
F();

alert(F.__proto__);// тут
alert(f.__proto__);// тут
alert(Function.__proto__);// тут
alert(Function.prototype);// и наконец тут

UPD Я проверял на Ghrome. Сейчас проверил на файрфоксе вызывает просто function(){}. Как я понимаю своя специфика хрома. Я прав?

x-yuri 18.01.2011 15:21

мог бы уже сделать свой код запускаемым

в общем ничего интересного, браузер пытается показать тебе исходный код функции, а названием Empty как бы намекает, что показывать нечего ;)

UpJump 18.01.2011 16:08

Цитата:

мог бы уже сделать свой код запускаемым
спс. как раз только хотел узнать как тут делать код запускаемым.
Цитата:

в общем ничего интересного, браузер пытается показать тебе исходный код функции, а названием Empty как бы намекает, что показывать нечего
А ну тогда понятно. Как я понял такой реализации в файрфоксе нету. Надо будет потом глянуть что с остальными браузерами.

Matre 18.01.2011 17:33

UpJump

alert(constructor.constructor("a", "return a ||arguments")().callee(true));


делайте выводы

UpJump 18.01.2011 19:32

и какие выводы?

Kolyaj 19.01.2011 10:08

Цитата:

Сообщение от UpJump
и какие выводы?

Matre даже однострочный скрипт без ошибок написать не может.

Цитата:

ошибка: constructor.constructor("a", "return a ||arguments") is not a function

Matre 19.01.2011 10:13

неврите,все работает

constructor = window.constructor = Object
Object.constructor = Function
Function("a", "return a || arguments") = XX = function (a) {return a || arguments}
XX() => [object Object] (arguments)
arguments.callee => XX
XX(true) => true, веть a || arguments = true

Kolyaj 19.01.2011 10:15

Цитата:

Сообщение от Matre
неврите,все работает

Да я не вру, я "Запустить" в вашем же сообщении нажал и скопировал то, что мне показал браузер.

Matre 19.01.2011 10:18

какой брозуер?
все штучки с object,window и т п одинаково рабоатю т вовсех броузерах

то что вы написали не возможно
window.constructor.constructor сущевствует,но функцией не являеться-что забред?
не будь constructor-выдало бы referencde-eror
если constructor-null или undefined то скосило ьы на constructor.constructor, а не constructor.constructor()
если же constructor объект то его конструктор по любому функция
значет,ошипки такой быит неможет

monolithed 19.01.2011 10:22

Цитата:

Сообщение от Matre
какой брозуер?

все

Matre 19.01.2011 10:24

opera11 работает

Matre 19.01.2011 10:26

вот код для всех

alert(constructor.constructor.constructor("a", "return a ||arguments")().callee(true));


смотрите балет, учите java script, делайте выводы
ничего незабыл вроде.

x-yuri 19.01.2011 10:26

opera 11 - исключение

UpJump 19.01.2011 13:34

constructor.constructor

Не совсем понял почему результатом выражения является Object().
Ведь получается
Объект.constructor
должен ссылаться на конструктор. А
Объект.constructor.constructor
должен вести на Function();
Вот пример:
function F(){}
var f = new F();
alert(f.constructor.constructor);

x-yuri 20.01.2011 00:58

Цитата:

Сообщение от UpJump
Не совсем понял почему результатом выражения является Object().

alert(constructor.constructor===Object)

у меня в опере false

p.s. DOM-объект != javascript-объект. Какой конструктор ты рассчитываешь получить? Но в идеальном мире сферическом окон, да, чтобы создать новое окно надо лишь написать
constructor()


p.p.s.
alert(Object == Object())

UpJump 23.01.2011 13:34

спс.

UpJump 23.01.2011 13:37

еще один вопрос.
почему не получается присвоить
var doc = document.write;
doc("!");

зато тут все в порядке?
var doc = alert;
doc("!");

Matre 23.01.2011 13:46

<script>
var doc = function () {
document.write.apply(document, arguments);
};
doc(1, 2, 3);
</script>

x-yuri 23.01.2011 13:51

потому что ты вызываешь write в контексте window
<script>
var doc = document.write;
doc.call(document, "!");
</script>

UpJump 23.01.2011 14:42

ясно. спс. всем по +1)

UpJump 23.01.2011 15:35

и еще один вопрос:)
var d = new Date();
alert(d.getSeconds());

так вот как сделать так что бы переменная d один раз присвоило значение .getSeconds()? то есть как бы зацементировала это значение только один раз. то есть мне нужно узнать значение .getSeconde() в момент вызова и сохранить его.

UpJump 23.01.2011 15:39

все спасибо вопрос отменяется.
сам задал сам ответил:)

Sweet 23.01.2011 15:39

alert( new Date().getSeconds() );


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