|
UpJump: Q&A :)
Здесь я буду держать полезные для меня ссылки:
<noscript> таблица URL-encoding Запрет на выделение текста Утечка памяти в IE animate сокращение интервала setInterval() для различных браузеров почитать тесты vml Где-то видел такой синтаксис. F = new Function(); F.[[prototype]] = Function.prototype; так вот что это? [[prototype]]Это массив в массиве? Если да то это может быть аналогично? [prototype[prototype]] |
нет, это не массив в массиве
http://javascript.ru/tutorial/object...herez-prototip |
ага. спс. разобрался
|
еще один вопрос. что значит сее выражение?
[object Object]То что это объект это я понимаю, но почему такой синтаксис, почему object повторяется два раза? |
object -это тип
Object -имя констурктора |
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.') |
ага спасибо. интересно
|
еще один вопрос наболел. никак не пойму разницу между [[prototype]] и .prototype.
P.S. очевидно нужно было назвать топик как нить иначе. типа МОИ ГЛУБОКИЕ ПОЗНАНИЯ В javascript:D . Короче буду тут очевидно задавать свои дурные вопросы и скромно надеяться на помощь в изучения данного сабжа. |
|
читал до этого и все равно не понял. [[prototype]] - содержит ссылку одного объекта на другой. А .prototype - откуда брать прототип. Все правильно? Если да то чисто гипотетически
Объект.[[prototype]] = Я_другой_объекти Объект.prototype = Я_другой_объектодно и тоже? Знаю что Объект.[[prototype]] = Я_другой_объект быть не может но все же чисто гипотетически? |
они ссылаются на один и тот же объект, но доступ к этому объекту ты можешь гарантированно получить только через конструктор. А [[prototype]] - это некое свойство, обозначающее ссылку на прототип из самого объекта. Например, у ff оно называется __proto__, у других браузеров такого нету
if( {}.__proto__) alert( {}.__proto__ === Object.prototype ) [[...]] - это детали реализации, которые не обязывают производителей браузеров расшаривать это авторам; может даже пример реализации: в браузере эти моменты могут быть реализованы по-другому UPD уже только у ie нету __proto__ |
спасибо за исчерпывающий ответ. вот кстати накопал полезную инфу в схемах.http://habrahabr.ru/blogs/javascript/108915/ Может кому будет интересно как мне.
|
Еще один вопрос от любопытного меня:)
Предположим вот код. F = function(){ f = function(){} } F(); alert(f.__proto__);// Выводит function Empty(); Так вот что это за функция. Из перевода ясно что она пустая. В чем ее смысл, почему к примеру не undefined? И куда ведет в данном случае __proto__ ? У функции F(); он идет к Function.prototype == Function.__proto__, это понятно. А с f(); неясно:blink: |
F = function(){ f = function(){} } F(); alert(f.__proto__ === Function.prototype); |
спс.
|
То есть у Function объект-прототип не является [object Object]. Что же тогда это за пустая функция function Empty()? Ну или хотя бы где можно про нее прочесть?
|
сделай так, чтобы я увидел эту твою function Empty()
|
F = function(){ f = function(){} } F(); alert(F.__proto__);// тут alert(f.__proto__);// тут alert(Function.__proto__);// тут alert(Function.prototype);// и наконец тут UPD Я проверял на Ghrome. Сейчас проверил на файрфоксе вызывает просто function(){}. Как я понимаю своя специфика хрома. Я прав? |
мог бы уже сделать свой код запускаемым
в общем ничего интересного, браузер пытается показать тебе исходный код функции, а названием Empty как бы намекает, что показывать нечего ;) |
Цитата:
Цитата:
|
UpJump
alert(constructor.constructor("a", "return a ||arguments")().callee(true)); делайте выводы |
и какие выводы?
|
Цитата:
Цитата:
|
неврите,все работает
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 |
Цитата:
|
какой брозуер?
все штучки с object,window и т п одинаково рабоатю т вовсех броузерах то что вы написали не возможно window.constructor.constructor сущевствует,но функцией не являеться-что забред? не будь constructor-выдало бы referencde-eror если constructor-null или undefined то скосило ьы на constructor.constructor, а не constructor.constructor() если же constructor объект то его конструктор по любому функция значет,ошипки такой быит неможет |
Цитата:
|
opera11 работает
|
вот код для всех
alert(constructor.constructor.constructor("a", "return a ||arguments")().callee(true)); смотрите балет, учите java script, делайте выводы ничего незабыл вроде. |
opera 11 - исключение
|
constructor.constructor Не совсем понял почему результатом выражения является Object(). Ведь получается Объект.constructorдолжен ссылаться на конструктор. А Объект.constructor.constructorдолжен вести на Function(); Вот пример: function F(){} var f = new F(); alert(f.constructor.constructor); |
Цитата:
alert(constructor.constructor===Object) у меня в опере false p.s. DOM-объект != javascript-объект. Какой конструктор ты рассчитываешь получить? Но в идеальном мире сферическом окон, да, чтобы создать новое окно надо лишь написать constructor() p.p.s. alert(Object == Object()) |
спс.
|
еще один вопрос.
почему не получается присвоить var doc = document.write; doc("!"); зато тут все в порядке? var doc = alert; doc("!"); |
<script> var doc = function () { document.write.apply(document, arguments); }; doc(1, 2, 3); </script> |
потому что ты вызываешь write в контексте window
<script> var doc = document.write; doc.call(document, "!"); </script> |
ясно. спс. всем по +1)
|
и еще один вопрос:)
var d = new Date(); alert(d.getSeconds()); так вот как сделать так что бы переменная d один раз присвоило значение .getSeconds()? то есть как бы зацементировала это значение только один раз. то есть мне нужно узнать значение .getSeconde() в момент вызова и сохранить его. |
все спасибо вопрос отменяется.
сам задал сам ответил:) |
alert( new Date().getSeconds() ); |
Часовой пояс GMT +3, время: 09:38. |
|