Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   функция копирования свойств (https://javascript.ru/forum/misc/4668-funkciya-kopirovaniya-svojjstv.html)

zzz 12.08.2009 14:14

функция копирования свойств
 
Сорри за стоко тем но прошу обьяснить новичку
Непонятны некоторые куски кода
// копирует все свойства из 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 вроде до этого и не использовался и вообще что этот кусок кода делает.

Kolyaj 12.08.2009 14:44

Цитата:

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

На названия переменных внимание обратите.

Цитата:

Сообщение от zzz
Вот тут вообще запутался копирование же и идёт из src а tobj вообще пустой обьект.

http://javascript.ru/tutorial/object отсюда статьи прочитали уже? Про прототипное наследование поняли? Нет, так читайте уже.

Цитата:

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

А где он должен был использоваться?

Цитата:

Сообщение от zzz
и вообще что этот кусок кода делает.

Копирует.

zzz 12.08.2009 14:49

Читал про прототипы понял. Это метод объекта который добавляет новые методы и свойства.
Ну там написано что в ИЕ нету toString тогда вообще зачем этот кусок кода

Kolyaj 12.08.2009 14:56

Цитата:

Сообщение от zzz
Ну там написано что в ИЕ нету toString тогда вообще зачем этот кусок кода

Вы просто не умеете читать.
Цитата:

Сообщение от zzz
// В IE пользовательский метод toString отсутствует в for..in


zzz 12.08.2009 15:05

Я это и иммел ввиду ведь этот кусок кода должен работать если браузер ИЕ почему?

Kolyaj 12.08.2009 15:11

Потому что в IE пользовательский метод toString отсутствует в for..in. Что непонятно-то?

zzz 12.08.2009 15:12

Но он же до этого там и не использовался так какая разница есть он в ИЕ или нету

Zeroglif 12.08.2009 15:15

JScript DontEnum Bug

zzz 12.08.2009 15:16

У меня с английским не очень

zzz 12.08.2009 15:17

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


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