JavaScript : 객체를 반환하는 함수
codecademy.com에서 JavaScript / jQuery 수업을 듣고 있습니다. 일반적으로 수업은 답변이나 힌트를 제공하지만이 수업은 도움이되지 않으며 지침에 약간 혼란스러워합니다.
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;
}
}
개체를 만든 후 개체의 속성을 수정할 수 있어야합니다.
JavaScript에서 대부분의 함수 는 호출 가능하고 인스턴스화 가능합니다. 이들은 [[Call]] 및 [[Construct]] 내부 메서드를 모두 가지고 있습니다.
호출 가능한 객체로서 괄호를 사용하여 호출 할 수 있으며 선택적으로 일부 인수를 전달할 수 있습니다. 호출의 결과로 함수는 값을 반환 할 수 있습니다 .
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
값은 sloppy 모드에서는 전역 객체가되고 엄격 모드에서는 undefined가됩니다.
생성자로서 new
연산자 를 사용하여 인스턴스화 할 수 있습니다. 이 연산자는 다음과 같은 작업을 수행 하는 [[Construct]] 내부 메서드 (생성자에서만 사용 가능)를 사용합니다.
- 로부터 상속하는 새로운 객체 생성
.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);
On the other hand, your other method is called the 'Revealing Closure Pattern' if I recall correctly.
function makePerson(name2, age2) {
var name = name2;
var age = age2;
return {
name: name,
age: age
};
}
I would take those directions to mean:
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;
}
The latest way to do this with ES2016 JavaScript
let makeGamePlayer = (name, totalScore, gamesPlayed) => ({
name,
totalScore,
gamesPlayed
})
const upadteAgeAndCount = async (id,age) => {
const user = await User.findByIdAndUpdate(id,{age},{new:true})
const count = await User.countDocuments({age})
return ({user,count})
}
참고URL : https://stackoverflow.com/questions/12272239/javascript-function-returning-an-object
'code' 카테고리의 다른 글
tomcat 서블릿에서 jsessionid를 비활성화 할 수 있습니까? (0) | 2020.11.10 |
---|---|
Eclipse에서 유효성 검사 오류를 어떻게 지우나요? (0) | 2020.11.10 |
requestWhenInUseAuthorization이 사용자에게 위치에 대한 액세스를 요청하지 않는 이유는 무엇입니까? (0) | 2020.11.09 |
Python AttributeError : '모듈'개체에 'SSL_ST_INIT'속성이 없습니다. (0) | 2020.11.09 |
간단한 ng-include가 작동하지 않습니다. (0) | 2020.11.09 |