person은 2개의 property(name,gender)와 1개의 method(syHello())를 가지고 있다.
객체내에서 method가 다른 property를 선택할때는 this를 가르킨다.
2.2 Object() 생성자 함수
new 연산자와 Object() 생성자 함수를 사용하여 빈 객체를 생성할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// 빈 객체의 생성 var person = newObject(); // 프로퍼티 추가 person.name = 'Lee'; person.gender = 'male'; person.sayHello = function () { console.log('Hi! My name is ' + this.name); };
프로퍼티 또는 메서드명 앞에 기술한 this는 생성자 함수로 생성될 인스턴스(instance)를 가리킨다. 따라서 this에 연결되어 있는 프로퍼티와 메서드는 public이다.
생성자 함수 내에서 선언된 일반 변수는 private이다. 즉 생성자 함수 내부에서는 자유롭게 접근이 가능하나 외부에서 접근할 수 있는 방법이 없다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
functionPerson(name, gender) { var married = 'yes'; // private this.name = name; // public this.gender = gender; // public this.sayHello = function(){ // public console.log('Hi! My name is ' + this.name); }; }
프로퍼티 값은 undefined을 제외한 모든 값과 표현식이 올 수 있으며 프로퍼티 값이 함수인 경우 이를 메서드라 한다.
예약어를 프로퍼티 이름으로 사용하여서는 않된다.
1 2 3 4 5 6 7 8
var person = { 'first-name': 'Ung-mo', 'last-name': 'Lee', gender: 'male', function: 1 // OK. 하지만 예약어는 사용하지 말아야 한다. };
console.log(person.function);
3.2 프로퍼티 값 읽기
객체의 프로퍼티에 접근하는 방법
마침표 . 표기법
대괄호 [] 표기법 -> kebab 형식일때 사용한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
var person = { 'first-name': 'Ung-mo', 'last-name': 'Lee', gender: 'male', };
console.log(person);
console.log(person.first-name); // NaN: undefined-name console.log(person[first-name]); // ReferenceError: first is not defined console.log(person['first-name']); // 'Ung-mo'
console.log(person.gender); // 'male' console.log(person[gender]); // ReferenceError: gender is not defined console.log(person['gender']); // 'male'
객체에 존재하지 않는 프로퍼티를 참조하면 undefined를 반환한다.
1 2 3 4 5 6 7
var person = { 'first-name': 'Ung-mo', 'last-name': 'Lee', gender: 'male', };
console.log(person.age); // undefined
3.3 프로퍼티 값 갱신
새로운 값을 할당하면 프로퍼티 값은 갱신된다.
1 2 3 4 5 6 7 8 9
var person = { 'first-name': 'Ung-mo', 'last-name': 'Lee', gender: 'male', };
pass-by-reference는 변수 foo, bar 모두 동일한 객체를 참조하고 있다. 따라서 참조하고 있는 객체의 val 값이 변경되면 변수 foo, bar 모두 동일한 객체를 참조하고 있으므로 두 변수 모두 변경된 객체의 프로퍼티 값을 참조하게 된다. 객체는 참조(Reference) 방식으로 전달된다. 결코 복사되지 않는다.