2024-06-21
This commit is contained in:
134
Writerside/topics/Object.md
Normal file
134
Writerside/topics/Object.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# 객체
|
||||
|
||||
```javascript
|
||||
let obj = {}; // 또는
|
||||
let obj = new Object();
|
||||
|
||||
obj.age = 14;
|
||||
obj.name = "Charlie";
|
||||
|
||||
console.log(obj.name); // C언어의 구조체 스타일
|
||||
console.log(obj['name']); // PHP의 연관 배열 스타일
|
||||
```
|
||||
|
||||
## 객체의 프로퍼티 나열
|
||||
|
||||
```javascript
|
||||
for (let key in obj) {
|
||||
console.log(key);
|
||||
}
|
||||
|
||||
for (let key of Object.keys(obj)) {
|
||||
console.log(key);
|
||||
}
|
||||
|
||||
for (let key of Object.getOwnPropertyNames(obj)) {
|
||||
console.log(key);
|
||||
}
|
||||
```
|
||||
|
||||
## 생성자 함수
|
||||
|
||||
```javascript
|
||||
function Person(name, age) {
|
||||
this.name = name;
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
let charlie = new Person("Charlie", 14);
|
||||
```
|
||||
|
||||
### Object.create()
|
||||
|
||||
```javascript
|
||||
let Point = {
|
||||
x: 0,
|
||||
y: 0,
|
||||
toString: function () {
|
||||
return "(" + this.x + ", " + this.y + ")";
|
||||
}
|
||||
};
|
||||
let point1 = Object.create(Point);
|
||||
|
||||
console.log(point1.toString());
|
||||
```
|
||||
|
||||
## 프로토타입을 통한 프로퍼티 정의
|
||||
|
||||
```prototype```을 통해서 프로퍼티를 추가하면, 하나의 인스턴스에만 추가된는 것이 아니라 해당 객체의 모든 인스턴스에 프로퍼티가 추가된다.
|
||||
|
||||
```javascript
|
||||
Person.prototype.gender = "Male";
|
||||
```
|
||||
|
||||
## 프로퍼티의 삭제
|
||||
|
||||
상속받지 않은 속성은 delete 연산자로 제거할 수 있습니다.
|
||||
|
||||
## 프로토타입 기반
|
||||
|
||||
자바나 C++과 같은 클래스 기반의 언어와는 달리 자바스크립트는 프로토타입 기반의 언어입니다. 프로토타입 기반 언어의 특징 상 클래스와 인스턴스의 구분이 모호해집니다.
|
||||
|
||||
```javascript
|
||||
function Animal(name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
function Dog(name) { // Animal을 상속
|
||||
Animal.call(this, name);
|
||||
this.bark = function () {
|
||||
console.log("멍멍");
|
||||
};
|
||||
}
|
||||
Dog.prototype = Object.create(Animal.prototype);
|
||||
|
||||
|
||||
let snoopy = new Dog("Snoopy");
|
||||
console.log(snoopy.name);
|
||||
snoopy.bark();
|
||||
```
|
||||
|
||||
## 객체 속성의 해체
|
||||
|
||||
```javascript
|
||||
let person = { name: "Charlie", age: 14 };
|
||||
|
||||
let { name, age } = person;
|
||||
|
||||
console.log(name);
|
||||
console.log(age);
|
||||
```
|
||||
|
||||
# 클래스
|
||||
|
||||
난해한 프로토타입 기반의 객체 대신 클래스 기반으로 클래스를 정의할 수도 있습니다.
|
||||
|
||||
```javascript
|
||||
class Animal {
|
||||
constructor(name) { // 생성자
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
static someStaticMethod() { }
|
||||
}
|
||||
|
||||
class Dog extends Animal { // 확장
|
||||
constructor(name) {
|
||||
super(name); // 부모 생성자 호출
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
let snoopy = new Dog("Snoopy");
|
||||
|
||||
console.log(snoopy.name);
|
||||
```
|
||||
|
||||
# JSON
|
||||
|
||||
자바스크립트 객체와 문자열을 서로 변환할 수 있습니다.
|
||||
|
||||
```javascript
|
||||
JSON.parse(str)
|
||||
JSON.stringfy(obj)
|
||||
```
|
||||
Reference in New Issue
Block a user