Непонятная ошибка в переменных

133
15 мая 2019, 10:50

Есть кусок кода :

function Actions(name,args){
    this.args = args;
    this.get_name = () => turn[this.args.target];
    this.copy = () => {
        this.args.card.copy = true;
        console.log("copy : "+copy);
        for(let i = 0;i<this.args.count;i++){
            let k = copy(this.args.card);
            this.get_name().take_card(k);
        }
    };
//some code
}

Есть функция copy (глубокая копия объекта), есть свойство copy у объекта card (true || false).

Почему copy, который идет ниже присвоения:

this.args.card.copy = true ;

воспринимается как свойство copy объекта card, а не как функция copy?

Причем если сместить присвоение вниз, то все работает нормально...

P.S.

function copy(arr){
    if(arr.length){
        var arr1 = [];
    }else if(typeof arr == "object"){
        var arr1 = {};
    }else{
        return arr; 
    }
    for(let key in arr){
        if(typeof arr[key] == "function" || typeof arr[key] != "object")
            arr1[key] = arr[key];
        else 
            arr1[key] = copy(arr[key],true);
    }
    return arr1;
}

P.S.S. Почему copy 1 - функция, а copy 2 - true?

//
/*1*/console.log(copy); // copy - функция
this.args.card.copy = true; 
/*2*/console.log(copy) // copy - true
//
Answer 1

В args.card я случайно отправлял объект window, т.е. я заменял свою функцию copy на значение true.

READ ALSO
выполнение socket.io в цикле

выполнение socket.io в цикле

Столкнулся с такой проблемой при использовании socketio: есть цикл в нем находится socket

130
Не работает Google+

Не работает Google+

в сервисе Поделиться от Яндекс: https://techyandex

128