Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.08.2009, 14:14
zzz zzz вне форума
Аспирант
Отправить личное сообщение для zzz Посмотреть профиль Найти все сообщения от zzz
 
Регистрация: 06.08.2009
Сообщений: 91

функция копирования свойств
Сорри за стоко тем но прошу обьяснить новичку
Непонятны некоторые куски кода
// копирует все свойства из 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 вроде до этого и не использовался и вообще что этот кусок кода делает.
Ответить с цитированием
  #2 (permalink)  
Старый 12.08.2009, 14:44
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от zzz
То есть копируются только те свойства и методы которые имеют тип undefined.
На названия переменных внимание обратите.

Сообщение от zzz
Вот тут вообще запутался копирование же и идёт из src а tobj вообще пустой обьект.
http://javascript.ru/tutorial/object отсюда статьи прочитали уже? Про прототипное наследование поняли? Нет, так читайте уже.

Сообщение от zzz
Тут тоже не понятно toString вроде до этого и не использовался и вообще
А где он должен был использоваться?

Сообщение от zzz
и вообще что этот кусок кода делает.
Копирует.
Ответить с цитированием
  #3 (permalink)  
Старый 12.08.2009, 14:49
zzz zzz вне форума
Аспирант
Отправить личное сообщение для zzz Посмотреть профиль Найти все сообщения от zzz
 
Регистрация: 06.08.2009
Сообщений: 91

Читал про прототипы понял. Это метод объекта который добавляет новые методы и свойства.
Ну там написано что в ИЕ нету toString тогда вообще зачем этот кусок кода
Ответить с цитированием
  #4 (permalink)  
Старый 12.08.2009, 14:56
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от zzz
Ну там написано что в ИЕ нету toString тогда вообще зачем этот кусок кода
Вы просто не умеете читать.
Сообщение от zzz
// В IE пользовательский метод toString отсутствует в for..in
Ответить с цитированием
  #5 (permalink)  
Старый 12.08.2009, 15:05
zzz zzz вне форума
Аспирант
Отправить личное сообщение для zzz Посмотреть профиль Найти все сообщения от zzz
 
Регистрация: 06.08.2009
Сообщений: 91

Я это и иммел ввиду ведь этот кусок кода должен работать если браузер ИЕ почему?
Ответить с цитированием
  #6 (permalink)  
Старый 12.08.2009, 15:11
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Потому что в IE пользовательский метод toString отсутствует в for..in. Что непонятно-то?
Ответить с цитированием
  #7 (permalink)  
Старый 12.08.2009, 15:12
zzz zzz вне форума
Аспирант
Отправить личное сообщение для zzz Посмотреть профиль Найти все сообщения от zzz
 
Регистрация: 06.08.2009
Сообщений: 91

Но он же до этого там и не использовался так какая разница есть он в ИЕ или нету
Ответить с цитированием
  #8 (permalink)  
Старый 12.08.2009, 15:15
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

JScript DontEnum Bug
Ответить с цитированием
  #9 (permalink)  
Старый 12.08.2009, 15:16
zzz zzz вне форума
Аспирант
Отправить личное сообщение для zzz Посмотреть профиль Найти все сообщения от zzz
 
Регистрация: 06.08.2009
Сообщений: 91

У меня с английским не очень
Ответить с цитированием
  #10 (permalink)  
Старый 12.08.2009, 15:17
zzz zzz вне форума
Аспирант
Отправить личное сообщение для zzz Посмотреть профиль Найти все сообщения от zzz
 
Регистрация: 06.08.2009
Сообщений: 91

(tobj[x] != src[x])
Это чтобы не копировались стандартные методы обьекта?
typeof tobj[x] == "undefined")
А это проверка есть такой метод вТобдж если нету значит не стандартный?
p.s. стандартные методы==методы которые и так есть у всех обьектов

Последний раз редактировалось zzz, 12.08.2009 в 15:34.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Атрибуты свойств Dicot Общие вопросы Javascript 30 10.04.2014 11:09
Как делать переменные имена свойств? khusamov Общие вопросы Javascript 2 04.08.2009 22:10
Функция movelayer () kotjke Общие вопросы Javascript 5 24.02.2009 17:44
Не работает функция Destrifer Элементы интерфейса 8 07.12.2008 01:34
Функция oncklick и ее использование Fobos Общие вопросы Javascript 3 23.05.2008 14:04