функция копирования свойств
Сорри за стоко тем но прошу обьяснить новичку
Непонятны некоторые куски кода // копирует все свойства из src в dst, // включая те, что в цепочке прототипов src до Object function mixin(dst, src){ // tobj - вспомогательный объект для фильтрации свойств, // которые есть у объекта Object и его прототипа var tobj = {} for(var x in src){ // копируем в dst свойства src, кроме тех, которые унаследованы от Object if((typeof tobj[x] == "undefined") || (tobj[x] != src[x])){ dst[x] = src[x]; } } // В IE пользовательский метод toString отсутствует в for..in if(document.all && !document.isOpera){ var p = src.toString; if(typeof p == "function" && p != dst.toString && p != tobj.toString && p != "\nfunction toString() {\n [native code]\n}\n"){ dst.toString = src.toString; } } } А именно if((typeof tobj[x] == "undefined") || (tobj[x] != src[x])) То есть копируются только те свойства и методы которые имеют тип undefined. И какой смысл в них? и те которые не равны src[x]. Вот тут вообще запутался копирование же и идёт из src а tobj вообще пустой обьект. А также // В IE пользовательский метод toString отсутствует в for..in if(document.all && !document.isOpera){ var p = src.toString; if(typeof p == "function" && p != dst.toString && p != tobj.toString && p != "\nfunction toString() {\n [native code]\n}\n"){ dst.toString = src.toString; } }Тут тоже не понятно toString вроде до этого и не использовался и вообще что этот кусок кода делает. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Читал про прототипы понял. Это метод объекта который добавляет новые методы и свойства.
Ну там написано что в ИЕ нету toString тогда вообще зачем этот кусок кода |
Цитата:
Цитата:
|
Я это и иммел ввиду ведь этот кусок кода должен работать если браузер ИЕ почему?
|
Потому что в IE пользовательский метод toString отсутствует в for..in. Что непонятно-то?
|
Но он же до этого там и не использовался так какая разница есть он в ИЕ или нету
|
|
У меня с английским не очень
|
(tobj[x] != src[x])
Это чтобы не копировались стандартные методы обьекта? typeof tobj[x] == "undefined") А это проверка есть такой метод вТобдж если нету значит не стандартный? p.s. стандартные методы==методы которые и так есть у всех обьектов |
zzz, проспись хорошенько:)
|
А что не так?
Проверка чтобы не копировались свойства которые и так есть у всех обьектов разве я не прав? |
Цитата:
зы: не насилуй свой моск... |
Когда я отдохнувший меня в КС тянет)
|
Осталось не понятно только условие
if(typeof p == "function" && p != dst.toString && p != tobj.toString && p != "\nfunction toString() {\n [native code]\n}\n"){ |
И что тут непонятного?
|
Ну вроде P должно быть в формате строки из-за toString а тут ==function должно быть раз, во вторых повторюсь зачем весь этот кусок кода(ведь он только для ИЕ) а также
p != "\nfunction toString() {\n [native code]\n}\n"что это вообще значит |
Цитата:
Цитата:
Цитата:
alert({}.toString)Так и будешь на каждый чих в форум писать? |
Цитата:
Цитата:
Всё равно Р равно src в формате строки значит и Р это строка (поправте если я не прав) И что такое [native code] Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Экономия символов.
|
Цитата:
|
zzz,
а вас учителя в школе не били (или бьют)? Цитата:
|
Блин так вы про это. Ну хорошо а какой смысл от использования toString
|
Я имею ввиду если он не чего не возвращает зачем он нужен?
|
Я сначла подумал что toString это свойство класса Animal
this.toString = function() { return name+" на расстоянии "+this.distance } Но если названия toString заменить и там и там то не работает Кажется я понял всё это дополнение для ИЕ как раз ради этого свойства ведь оно toString а его как раз в операторе цикла for...in...нету. Осталось только понять почему свойство называется именно toString ведь скобок нету значит и к строковому типу не приводит и заменить название нельзя тогда не работает... |
Цитата:
|
zzz,
извини, но я устал разгребать кашу в твоей голове :) Поспи, прочитай еще раз статьи на этом сайте, может поймешь. |
var someObject = { "title" : "Я — объект", "toString" : function() { return "Но если меня хотят использовать, как строку, я буду ею!"; } } alert(someObject.title); // Я — объект alert(someObject); // Но если меня хотят использовать, как строку, я буду ею! |
Цитата:
http://www.translate.ru/text_Translation.aspx http://translate.google.com/translate_t# |
То есть всё таки toString превращает в строку и выводит эту строку с помошью модального окна. Но зачем Андрей у вас как "Я объект" как "Но если меня..." вывелись одинаково хотя к строковому типу превели только вторую запись. Может чтобы использовать свойства и методы объекта String?(поправте если я не прав)
|
zzz,
toString() возвращает строковое представление объекта. Она вызывается, например, когда вы пытаетесь использовать объект, как строку: вывести в модальном диалоге alert, или провести конкатенацию с другой строкой. |
Но можно выводить и не ввиде строки например "title" : "Я — объект",
и как уже сказали там не toString() а toString |
Цитата:
alert('"title" : "'+someObject.title+'"'); Цитата:
|
Дак почему метод тогда называется toString? Он превращает значение в строку или нет? Ответе наконец-то. Если превращает то почему скобок то нету. Если превращает то зачем чтобы использовать методы и свойства встроеного объекта String?
|
Цитата:
var a=1, b=2, c=true; alert(a.toString == b.toString); alert(a.toString == c.toString); alert(typeof a); alert(typeof a.toString()); Цитата:
UPD: или ты думаешь, что в коде a.toString().replace('1', '2') ты не используешь методы объекта String? |
Я имею ввиду зачем превращать? Ведь и так работает. То есть если мы превратили то сможем использовать свойства и методы String?
|
Часовой пояс GMT +3, время: 03:13. |