хороший сайт)
http://dmitrysoshnikov.com/ecmascrip...hapter-3-this/ |
Livanderiaamarum,
Неужели :) |
Цитата:
что вернёт данный код и почему? (function(){ return this[this]; }).call(1); PS классная статья. кстати, я долго не мог понять, почему код отсюда будет возвращать не-Reference. для этого нужно знать, как работают эти операторы. (они вернут ЗНАЧЕНИЕ. т.е. =>) foo = { bar : function(){alert(this);} }; (foo.bar = foo.bar)(); // eq to (function(){alert(this);})(); |
Цитата:
// вызов анонимной функции в контексте объекта // call(1) -> call(Number) -> call(Object); (function(){ // вернуть св-во объекта вызова по имени объекта вызова // т.к. такого св-ва нет, то undefined return this[this]; }).call(1); |
чему равен this, какое свойство он пытается получить и почему undefined собстно ?)
развёрнутей, с примерами кода :) представь, что ты обьясняешь ребёнку. пока ты ПРОСТО не обьяснишь, я буду считать, что ты не понял. (так и есть - если человек понял материал, то он сможет его перефразировать, оставив суть и изменив изложение) |
Я понял так. А уж насколько правильно, эт Вы мне скажите)
// вызов анонимной функции в контексте объекта // call(1) -> call(Number) -> call(Object); (function() { // проверить тип объекта alert(this instanceof Number); // True alert(this == 1); // значение св-ва // вернуть св-во объекта вызова по имени объекта вызова // т.к. было создано безымянное св-во, то undefined return this[this]; }).call(1); |
Цитата:
this[this] == ObjectWrapNumber[ObjectWrapNumber.valueOf()]; Ну или просто - (1)[1] :) |
nerv_, почти почти :)
Цитата:
Цитата:
узнаем тип ключа. var foo = {} foo[1] = "ok"; // ключ - number. for(var i in foo) alert(typeof i); // string в массивах так же. PS. не могу никак найти соотв. раздел в спецификации. верьте наслово :) |
melky,
А чего верить на слово то? Просто движок внутри себя вызывает функцию toString у объектов попадающих в квадратные скобки, когда таким образом обращаешься к массиву/объекту. А вот как раз туда передаётся то, что приходит по reference. Далее примерно такой псевдокод: get function getByIndex(object){ return this[object.toString()] // ну или valueOf().toString() } set function setByIndex(object, value){ return (this[object.toString()] = value); } Так что я не прав скорее с тем, что сразу передаётся valueOf, оно просто вычисляется во внутренней функции. А конструкция тогда - ObjectWrapNumber[ObjectWrapNumber]. П.С. Что ключ в итоге всегда строка это и так понятно :) |
Цитата:
|
Часовой пояс GMT +3, время: 03:20. |