2014-11-15 2 views
-1

В функции пересечения, которая проверяет, пересекаются ли два объекта на холсте, мне нужно добавить свойство obj.x и obj.width, чтобы получить obj.right (side). Каким-то образом свойства объединяются, а не добавляются. Вероятно, это связано с ссылочным типом, но я не вижу, как я могу захватить значения в примитивных типах.JS конкатенирует значения свойств объекта (числовые) вместо добавления

function intersects(obj1, obj2) { // checks if 2 shapes intersect 
    var ob2x = obj2.x; 
    var ob2width = obj2.width; 
    if (obj1.x > +obj2.x + 70 || obj2.x > +obj1.x + 70) { 
     console.log('false : obj1.x=' + obj1.x + '  obj2.right=' + parseInt(ob2x) + parseInt(ob2width)); 
     return false; 
    } 

    if (obj1.y > +obj2.y + +obj2.height || obj2.y > +obj1.y + +obj1.height) { 
     console.log('false'); 
     return false; 
    } 

    console.log('false'); 
    return true; 
} 

Я уже пытался получить числовое значение свойства объекта, как вы можете видеть. Не работает

Также пробовал parseInt(), который не работал.

Я полагаю, что я могу поместить значения отдельно в качестве параметров в fuctions, но я надеялся сохранить его как можно короче, потому что дети должны его использовать.

+1

Вместо того, чтобы просто сбрасывать комок кода перед нами, можете ли вы сказать нам, какая часть не работает должным образом? – JLRishe

ответ

0

Вам нужно добавить оператор группировки:

... + (parseInt(ob2x) + parseInt(ob2width)) + ... 

выделить ту часть выражения, так что + рассматривается как дополнение. В противном случае полное выражение сохраняет его как конкатенацию, даже если вы преобразовываете их в значения в числа (потому что, если строка находится в любом месте выражения, которое оценивается, + означает concat).

E.g.

var x = 5; 
var y = 6; 

console.log('Sum: ' + x + y); // 56 

console.log('Sum: ' + (x + y)); // 11 
+0

Как смешно просто. Большое спасибо. Это избавляет меня от разочарования. – Jenita