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;
}
}
Я должен быть в состоянии изменить свойства объект после его создания.
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оператор чтобы создать их экземпляр. Этот оператор использует [[строительство]] внутренний метод (доступен только в конструкторах), который делает что-то вроде этого:
- создает новый объект, который наследует от
.prototypeконструктора- вызывает конструктор, передающий этот объект как
thisстоимостью- он возвращает значение, возвращенное конструктором, если это объект или объект, созданный на шаге 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