2016-02-07 5 views
0

Вот код:JavaScript: Invalid цель деструктурирующий

function BinarySearchNode(key) { 
    let node = {}; 
    node.key = key; 
    node.lft = null; 
    node.rgt = null; 

    node.log =() => { 
     console.log(node.key); 
    } 

    node.get_node_with_parent = (key) => { 
     let parent = null; 

     while (this) { 
      if (key == this.key) { 
       return [this, parent]; 
      } 

      if (key < this.key) { 
       [this, parent] = [this.lft, this]; 
      } else { 
       [this, parent] = [this.rgt, this]; 
      } 
     } 

     return [null, parent]; 
    } 

    return node; 
} 

Мой Firefox является 44.0 и бросает SyntaxError для этих линий:

if (key < this.key) { 
    [this, parent] = [this.lft, this]; 
} else { 

Я пытался понять, что именно не так здесь чтение this blogpost и the MDN. Unfortuntely, я до сих пор не хватает его :(

+2

Не будет ли это означать, что вы пытаетесь присвоить объект из-под себя? –

+0

@DaveNewton не имеет понятия, если честно. В настоящее время я понимаю, что '' это как 'self' в python: просто ссылка (имя, указатель) для объекта. Итак, если я переназначить его на другой объект, я в порядке. Может быть, не так. – alisianoi

+1

Не так много. Это * ссылка на объект, но объект сам по себе.Что бы это означало установить себе что-то другое? сюжет, не очень горячий код. –

ответ

2

this не является переменной, но ключевое слово и не могут быть назначены использовать переменную:.

node.get_node_with_parent = function(key) { 
    let parent = null; 
    let cur = this; // if you use an arrow function, you'll need `node` instead of `this` 
    while (cur) { 
     if (key == cur.key) { 
      return [cur, parent]; 
     } 
     if (key < cur.key) { 
      [cur, parent] = [cur.lft, cur]; 
     } else { 
      [cur, parent] = [cur.rgt, cur]; 
     } 
    } 
    return [null, parent]; 
} 
+0

спасибо, я вижу ваш комментарий о 'node' и' this', я в настоящее время немного ударяю по голове из-за этого обзора/закрытия/не знаю, что он правильно назвал. – alisianoi

+1

Если вы используете 'this' в функции со стрелкой, он не будет ссылаться на объект, на который вызывается функция (метод), но с тем же' this', что и ее родительская область - в вашем случае 'this' of 'BinarySearchNode'. Если бы это был конструктор (и вызывается с помощью 'new'), это имело бы смысл, но в настоящее время это всего лишь заводская функция, и вы захотите обратиться к' node' через закрытие. – Bergi

Смежные вопросы