Не удается расширить этот объект JavaScript - PullRequest
0 голосов
/ 18 февраля 2019

Я проверил некоторые вопросы с похожими проблемами, но не смог справиться с моим, где у меня есть file.js :

'use strict'

function singlyLinkedList() {
  if (this ) {
    this.head = null
  }
}

singlyLinkedList.prototype.append = function(value) {
  let node = {
    data: value,
    next: null
  }
  if( !this.head ) {
    this.head = node
  } else {
    let pointer = this.head
    while( pointer ) {
      pointer = pointer.next
    }
    pointer.next = node
  }
}

Который я звоню из index.html :

<!DOCTYPE html>
<html>
  <head>
    <title> Test </title>
    <meta charset="UTF-8">
    <script src="file.js"></script>
  </head>
  <body>
    <script>
      let linkedList = singlyLinkedList()
      let integersArray = [1, 22, 333, 4444]
      integersArray.forEach(element => linkedList.append(element))

    </script>
  </body>
</html>

При переходе по этому HTML-файлу с помощью браузера Chrome и проверке консоли отображается следующее сообщение об ошибке:

Uncaught TypeError: Невозможно прочитать свойство 'append' из undefined

Как это исправить?

Обновление:

Вторая проблема, с которой я столкнулся (возможно, отдельный вопрос?), Заключается в том, что еслиЯ пишу:

function singlyLinkedList() {
    this.head = null
}

Я получаю это сообщение об ошибке:

Uncaught TypeError: Невозможно установить свойство 'head' из неопределенного

1 Ответ

0 голосов
/ 18 февраля 2019

несколько вещей, о которых вам нужно позаботиться,

  1. Используйте ключевое слово new для создания экземпляра 'singlyLinkedList'
  2. ваше условие завершения цикла while не являетсяправильный.это должно быть while( pointer.next )

проверьте ниже версии,

//create a `file.js` file and put this code inside that. running this code snippet on stackoverflow util wont work as you need a separate `file.js`

'use strict';

function singlyLinkedList() {
    this.head = null;
}

singlyLinkedList.prototype.append = function(value) {
    let node = {
        data: value,
        next: null
    };
    if( !this.head ) {
        this.head = node
    } else {
        let pointer = this.head;
        while( pointer.next ) {  //check this
            pointer = pointer.next
        }
        pointer.next = node
    }
};
<!DOCTYPE html>
<html>
  <head>
    <title> Test </title>
    <meta charset="UTF-8">
    <script src="file.js"></script>
  </head>
  <body>
    <script>
        let linkedList = new singlyLinkedList(); // check this
        let integersArray = [1, 22, 333, 4444];
        integersArray.forEach(element => linkedList.append(element));
        console.log('linkedList: ', linkedList);

    </script>
  </body>
</html>

enter image description here

enter image description here

это будетlog что-то вроде

enter image description here

И я твердо верю, что вам нужно использовать ключевое слово new для создания экземпляра функции singlyLinkedList, как вы хотитеиспользовать преимущества prototype концепции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...