JavaScript: функция, возвращающая объект



Я беру некоторые уроки JavaScript/jQuery на codecademy.com обычно уроки дают ответы или подсказки, но для этого он не дает никакой помощи, и я немного смущен инструкциями.



Он говорит, чтобы функция makeGamePlayer возвращала объект с тремя ключами.



//First, the object creator
function makeGamePlayer(name,totalScore,gamesPlayed) {
//should return an object with three keys:
// name
// totalScore
// gamesPlayed
}


Я не уверен, если я должен делать это



//First, the object creator
function makeGamePlayer(name,totalScore,gamesPlayed) {
//should return an object with three keys:
// name
// totalScore
// gamesPlayed

this.name = name;
this.totalScore = totalScore;
this.gamesPlayed = gamesPlayed;
}


или что-то вроде этого



 //First, the object creator
function makeGamePlayer(name,totalScore,gamesPlayed) {
//should return an object with three keys:
// name
// totalScore
// gamesPlayed

var obj = {
this.name = name;
this.totalScore = totalScore;
this.gamesPlayed = gamesPlayed;
}
}


Я должен быть в состоянии изменить свойства объект после его создания.

291   4  

4 ответов:

в JavaScript, большинство функции обе отзывных и материализуемых: они имеют как [[вызов]] и [[строительство]] внутренние методы.

как вызываемые объекты, вы можете использовать круглые скобки для их вызова, при необходимости передавая некоторые аргументы. В результате вызова функции возвращает значение.

var player = makeGamePlayer("John Smith", 15, 3);

код выше вызывает функцию makeGamePlayer и сохраняет возвращаемое значение в переменной player. В этом случае вы можете определить функцию следующим образом:

function makeGamePlayer(name, totalScore, gamesPlayed) {
  // Define desired object
  var obj = {
    name:  name,
    totalScore: totalScore,
    gamesPlayed: gamesPlayed
  };
  // Return it
  return obj;
}

кроме того, при вызове функции вы также передаете дополнительный аргумент под капотом, который определяет значение this внутри функции. В случае выше, так как makeGamePlayer не вызывается как метод,this значение будет глобальным объектом в режиме коряво, или undefined в строгом режиме.

как конструкторы, вы можете использовать new оператор чтобы создать их экземпляр. Этот оператор использует [[строительство]] внутренний метод (доступен только в конструкторах), который делает что-то вроде этого:

  1. создает новый объект, который наследует от .prototype конструктора
  2. вызывает конструктор, передающий этот объект как this стоимостью
  3. он возвращает значение, возвращенное конструктором, если это объект или объект, созданный на шаге 1 иначе.
var player = new GamePlayer("John Smith", 15, 3);

приведенный выше код создает экземпляр GamePlayer и сохраняет возвращаемое значение в переменной player. В этом случае вы можете определить функцию следующим образом:

function GamePlayer(name,totalScore,gamesPlayed) {
  // `this` is the instance which is currently being created
  this.name =  name;
  this.totalScore = totalScore;
  this.gamesPlayed = gamesPlayed;
  // No need to return, but you can use `return this;` if you want
}

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

преимущество использования конструкторов заключается в том, что экземпляры наследуются от GamePlayer.prototype. Затем, вы можете определить свойства и сделать их доступными во всех случаях

вы можете просто сделать это с помощью литерал объекта:

function makeGamePlayer(name,totalScore,gamesPlayed) {
    return {
        name: name,
        totalscore: totalScore,
        gamesPlayed: gamesPlayed
    };
}

оба стиля, с оттенком настройки, будет работать.

первый метод использует конструктор Javascript, который, как и большинство вещей, имеет плюсы и минусы.

 // By convention, constructors start with an upper case letter
function MakePerson(name,age) {
  // The magic variable 'this' is set by the Javascript engine and points to a newly created object that is ours.
  this.name = name;
  this.age = age;
  this.occupation = "Hobo";
}
var jeremy = new MakePerson("Jeremy", 800);

С другой стороны, ваш другой метод называется "раскрывающий шаблон закрытия", если я правильно помню.

function makePerson(name2, age2) {
  var name = name2;
  var age = age2;

  return {
    name: name,
    age: age
  };
}

Я бы взял эти направления означают:

  function makeGamePlayer(name,totalScore,gamesPlayed) {
        //should return an object with three keys:
        // name
        // totalScore
        // gamesPlayed

         var obj = {  //note you don't use = in an object definition
             "name": name,
             "totalScore": totalScore,
             "gamesPlayed": gamesPlayed
          }
         return obj;
    }

Comments

    Ничего не найдено.