Функция не выдвигает пустой массив для создания списка. Как это исправить - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь добавить элементы в список хобби с помощью вызова функции. Но он не добавлен, и я все время получаю пустой массив. Есть что-то глупое, что мне не хватает. Можете ли вы, пожалуйста, направьте меня, чтобы решить эту проблему. Я включаю весь код, над которым работаю.

Я попытался вызвать функцию, как. . Человек () addHobby ( 'TestHobby');


function person(firstName, lastName) {

    var FullName = firstName + ' ' + lastName;
    var hobbies = [‘’];

    return {

        /**
         * Returns truthy if the person already has this hobby
         * @param {string} hobby
         * @returns {boolean}
         */
        hasHobby: function(hobby) {
            return hobbies.indexOf(hobby)>=0;
        },

        /**
         * Returns the person's hobbies after adding the given hobby
         * @param {string} hobby
         * @returns {array}
         */
        addHobby: function(hobby) {
            return hobbies.indexOf(hobby)>0 ? hobbies : hobbies.push(hobby);
        },

        /**
         * Returns the person's hobbies after removing the given hobby
         * @param {string} hobby
         * @returns {array}
         */
        removeHobby: function(hobby) {
            if (hobbies.indexOf(hobby)>0) {
                // note: filter is a standard array function that creates a new array
                // with all elements that pass the test implemented by the provided function
                hobbies = hobbies.filter(function(hobby) { 
                    return hobby != hobby;
                });
                return hobbies;
            } else {
                return hobbies;
            }
        },

        /**
         * Returns the person's hobbies
         * @returns {array}
         */
        getHobbies: function() {
            return hobbies
        },

        /**
         * Returns the person's full name
         * @returns {string}
         */
        getName: function() {
            return FullName;
        },

  };
};

Ответы [ 3 ]

2 голосов
/ 16 апреля 2019

Может быть, вы не уверены, что вы на самом деле создали здесь. Это определение класса для человека. Чтобы вызвать его методы, вам нужно создать новый экземпляр человека, например:

var gregory=new person();

gregory - это ваша ссылка на вашего только что созданного человека. Чтобы дать Григорию хобби:

gregory.addHobby("sleeping");

Теперь вы можете запросить его хобби, как:

console.log(gregory.getHobbies());
1 голос
/ 16 апреля 2019

Вам нужно создать свою личность, а затем использовать ее.Как это:

var p = new person();
p.addHobby("test");
console.log(p.getHobbies());

function person(firstName, lastName) {

    var FullName = firstName + ' ' + lastName;
    var hobbies = [];

    return {

        /**
         * Returns truthy if the person already has this hobby
         * @param {string} hobby
         * @returns {boolean}
         */
        hasHobby: function(hobby) {
            return hobbies.indexOf(hobby)>=0;
        },

        /**
         * Returns the person's hobbies after adding the given hobby
         * @param {string} hobby
         * @returns {array}
         */
        addHobby: function(hobby) {
            return hobbies.indexOf(hobby)>0 ? hobbies : hobbies.push(hobby);
        },

        /**
         * Returns the person's hobbies after removing the given hobby
         * @param {string} hobby
         * @returns {array}
         */
        removeHobby: function(hobby) {
            if (hobbies.indexOf(hobby)>0) {
                // note: filter is a standard array function that creates a new array
                // with all elements that pass the test implemented by the provided function
                hobbies = hobbies.filter(function(hobby) { 
                    return hobby != hobby;
                });
                return hobbies;
            } else {
                return hobbies;
            }
        },

        /**
         * Returns the person's hobbies
         * @returns {array}
         */
        getHobbies: function() {
            return hobbies
        },

        /**
         * Returns the person's full name
         * @returns {string}
         */
        getName: function() {
            return FullName;
        },

  };
};

var p = new person();
p.addHobby("test");
console.log(p.getHobbies());
0 голосов
/ 16 апреля 2019

В функции addHobbies вы возвращаете результат push(), который является новой длиной массива, а не фактическим массивом.

Попробуйте это:

addHobby: function(hobby) {
   if (hobbies.indexOf(hobby) < 0) {
      hobbies.push(hobby)
   }

   return hobbies;
}

Также вам нужно создать человека, если вы хотите, чтобы его массив хобби обновлялся позже:

var fred = person();
console.log(fred.addHobby("Test hobbie"));
console.log(fred.getHobbies())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...