2016-03-09 2 views
0

Метод объекта не работает, но журналы свойств отлично. Итак, я объявляю переменную в глобальной области и пытаюсь назначить ей объект внутри функции. Свойство «id» правильно отслеживается, но метод вызывает ошибку. Я искал аналогичную запись для этого, но ничего не могу найти.Javascript Object method scope - метод завершается ошибкой

Я предпочел бы использовать OO в Javascript, поэтому было бы здорово, если бы вы могли дать мне указатель на эту проблему. Заранее спасибо.

var currentEnemyPieceObject; // this gets set in the play function 

function EnemyPieceObject(_id){ 

    this.id = _id; 
    this.pathArray = []; 
    this.active = false; 

} 

EnemyPieceObject.prototype = { 

    constructor:EnemyPieceObject, 
    addPointToPathArray:function(xPos, yPos){ 
    var point = { "x":xPos, "y":yPos }; 
    this.pathArray.push(point); 
    } 
} 


function play() { 

    currentEnemyPieceObject = new EnemyPieceObject(0); 

    console.log(currentEnemyPieceObject.id); // result is 0 

    currentEnemyPieceObject.addPointToPathArray(0, 0); 
    // results in error 
    // Uncaught TypeError: Uncaught TypeError: 
    // currentEnemyPieceObject.addPointToPathArray is not a function 

} 
+1

"' this.currentEnemyPieceObject ... '" из сообщения об ошибке не совпадает с фактическим кодом вы показываете здесь ...!? – deceze

+0

спасибо deceze - да - я просто попробовал другие варианты. Спасибо - все равно не получается. Я вставил правильную ошибку. (орел глаз :)) – gingrrr

+0

Ну ... этот код как есть, не вызывает никакой такой ошибки ... – deceze

ответ

1

Проблема может заключаться в том, что вы вызываете функцию play() перед инициализацией объекта. Выполните снимок кода ниже, когда открыто окно консоли (обычно F12). Сообщаемая ошибка происходит, когда play() вызывается слишком рано. Тем не менее, он работает так, как ожидается, когда его вызывают позже.

var currentEnemyPieceObject; 
 

 
try { 
 
    play(); 
 
} 
 
catch(e) { console.error(e.message); } 
 
// prints "currentEnemyPieceObject.addPointToPathArray is not a function" 
 

 
function EnemyPieceObject(_id){ 
 
    this.id = _id; 
 
    this.pathArray = []; 
 
    this.active = false; 
 
} 
 
EnemyPieceObject.prototype = { 
 
    constructor:EnemyPieceObject, 
 
    addPointToPathArray:function(xPos, yPos){ 
 
    var point = { "x":xPos, "y":yPos }; 
 
    this.pathArray.push(point); 
 
    } 
 
} 
 
function play() { 
 
    currentEnemyPieceObject = new EnemyPieceObject(0); 
 
    currentEnemyPieceObject.addPointToPathArray(0, 0); 
 
} 
 

 
play(); // no errors 
 

 
console.info(typeof currentEnemyPieceObject.addPointToPathArray); // prints "function"

+0

Roberto, Спасибо, я что-то узнал, хорошо ответил - спасибо за ваше время :) Итак, мораль этой истории заключается в том, чтобы определить все ваши Классы буквально перед выполнением любого кода в Javascript. (Мой AS3-фон не привел меня к такому выводу) – gingrrr