recursal/MDN huggingface dataset:
handler.getPrototypeOf()
========================

**`handler.getPrototypeOf()`** 메서드는 `[[GetPrototypeOf]]` 내부 메서드에 대한 트랩입니다.

시도해보기
-----

구문
--


```js
new Proxy(obj, {
  getPrototypeOf(target) {
    // …
  },
});
```

### 매개변수

다음 매개변수는 `getPrototypeOf()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체

### 반환 값

`getPrototypeOf()` 메서드는 객체 또는 `null`을 반환합니다.

설명
--

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* `Object.getPrototypeOf()`
* `Reflect.getPrototypeOf()`
* `__proto__`
* `Object.prototype.isPrototypeOf()`
* `instanceof`
### 불변 조건

다음 불변 조건이 위반되면 프록시에서 `TypeError`가 발생합니다.

* `getPrototypeOf()` 메서드는 반드시 객체나 `null`을 반환해야 합니다.
* `target`을 확장할 수 없는 경우, `Object.getPrototypeOf(proxy)` 메서드는 `Object.getPrototypeOf(target)`과 동일한 값을 반환해야 합니다.
예제들
---

### 기본 사용법


```js
const obj = {};
const proto = {};
const handler = {
  getPrototypeOf(target) {
    console.log(target === obj); // true
    console.log(this === handler); // true
    return proto;
  },
};

const p = new Proxy(obj, handler);
console.log(Object.getPrototypeOf(p) === proto); // true
```

### getPrototypeOf 트랩을 싱핼 시키는 5가지 방법


```js
const obj = {};
const p = new Proxy(obj, {
  getPrototypeOf(target) {
    return Array.prototype;
  },
});
console.log(
  Object.getPrototypeOf(p) === Array.prototype, // true
  Reflect.getPrototypeOf(p) === Array.prototype, // true
  p.__proto__ === Array.prototype, // true
  Array.prototype.isPrototypeOf(p), // true
  p instanceof Array, // true
);
```

### 두 가지 예외


```js
const obj = {};
const p = new Proxy(obj, {
  getPrototypeOf(target) {
    return "foo";
  },
});
Object.getPrototypeOf(p); // TypeError: "foo" is not an object or null

const obj = Object.preventExtensions({});
const p = new Proxy(obj, {
  getPrototypeOf(target) {
    return {};
  },
});
Object.getPrototypeOf(p); // TypeError: expected same prototype value
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-getprototypeof |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `Object.getPrototypeOf()`
* `Reflect.getPrototypeOf()`
handler.preventExtensions()
===========================

**`handler.preventExtensions()`** 메서드는 `Object.preventExtensions()`에 대한 트랩입니다.

시도해보기
-----

구문
--


```js
new Proxy(target, {
  preventExtensions(target) {},
});
```

### 매개 변수

다음 매개변수는 `preventExtensions()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체

### 반환 값

`preventExtensions()` 메서드는 불리언 값을 반환합니다.

설명
--

**`handler.preventExtensions()`** 메서드는 `Object.preventExtensions()`에 대한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* `Object.preventExtensions()`
* `Reflect.preventExtensions()`
* `Object.seal()`
* `Object.freeze()`
### 불변 조건

다음 불변 조건이 위반되면 프록시에서 `TypeError`가 발생합니다.

* `Object.preventExtensions(proxy)`는 `Object.isExtensible(proxy)`가 `false`인 경우에만 `true`를 반환합니다.
예제
--

### preventExtensions 트랩

다음 코드는 `Object.preventExtensions()`를 트랩합니다.


```js
const p = new Proxy(
  {},
  {
    preventExtensions(target) {
      console.log("called");
      Object.preventExtensions(target);
      return true;
    },
  },
);

console.log(Object.preventExtensions(p)); // "called"
// false
```


다음 코드는 불변 조건을 위반합니다.


```js
const p = new Proxy(
  {},
  {
    preventExtensions(target) {
      return true;
    },
  },
);

Object.preventExtensions(p); // TypeError is thrown
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-preventextensions |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `Object.preventExtensions()`
* `Reflect.preventExtensions()`
handler.deleteProperty()
========================

**`handler.deleteProperty()`** 메서드는 `delete` (en-US) 연산자에 대한 트랩입니다.

시도해보기
-----

구문
--


```js
new Proxy(target, {
  deleteProperty(target, property) {},
});
```

### 매개 변수

다음 매개변수는 `deleteProperty()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체

`property`

삭제할 이름 또는 속성의 `Symbol`입니다.

### 반환 값

`deleteProperty()` 메서드는 속성이 성공적으로 삭제되었는지를 나타내는 `불리언`을 반환합니다.

설명
--

**`handler.deleteProperty()`** 메서드는 `delete` (en-US) 연산자에 대한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* 속성 삭제: `delete proxy[foo]`와
 `delete proxy.foo`
* `Reflect.deleteProperty()`
### 불변 조건

다음 불변 조건이 위반되면 프록시에서 `TypeError`가 발생합니다.

* 속성이 대상 객체의 구성할 수 없는 자체 속성으로 존재하는 경우, 속성을 삭제할 수 없습니다.
예제들
---

### delete 연산자 가로채기

다음 코드는 `delete` (en-US) 연산자를 트랩합니다.


```js
const p = new Proxy(
  {},
  {
    deleteProperty(target, prop) {
      if (!(prop in target)) {
        console.log(`property not found: ${prop}`);
        return false;
      }
      delete target[prop];
      console.log(`property removed: ${prop}`);
      return true;
    },
  },
);

p.a = 10;
console.log("a" in p); // true

const result1 = delete p.a; // "property removed: a"
console.log(result1); // true
console.log("a" in p); // false

const result2 = delete p.a; // "property not found: a"
console.log(result2); // false
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-delete-p |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `delete` (en-US) 연산자
* `Reflect.deleteProperty()`
handler.set()
=============

**`handler.set()`** 메서드는 속성 값을 설정을 위한 트랩입니다.

시도해보기
-----

구문
--


```js
new Proxy(target, {
  set(target, property, value, receiver) {},
});
```

### 매개 변수

다음 매개변수는 `set()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체

`property`

설정할 속성의 이름 또는 `Symbol`

`value`

설정할 속성의 새 값

`receiver`

 할당이 지시된 원래 객체입니다. 이것은 일반적으로 프록시 자체입니다.
 그러나 `set()` 처리기는 프로토타입 체인이나 다양한 다른 방법 등을 통해
 간접적으로 호출할 수도 있습니다.


 예를 들어, 스크립트가 `obj.name = "jen"`을 수행하는데,
 `obj`는 프록시가 아니면서 속성 `.name`이 없고,
 프로토타입 체인에는 프록시가 있다고 가정해봅시다.
 이떄 해당 프록시의 `set()` 처리기가 호출되고나서 `obj`가 수신자로 전달됩니다.


### 반환 값

`set()` 메서드는 불리언 값을 반환합니다.

* 할당이 성공했으면 `true`를 반환합니다.
* 엄격 모드에서 `set()` 메서드가 `false`를 반환하면 `TypeError` 예외가 발생합니다.
설명
--

**`handler.set()`** 메서드는 속성 값을 설정을 위한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* 속성 할당: `proxy[foo] = bar`와 `proxy.foo = bar`
* 상속된 속성 할당:
 `Object.create(proxy)[foo] = bar`
* `Reflect.set()`
### 불변 조건

다음 불변 조건이 위반되면 프록시에서 `TypeError`가 발생합니다.

* 대상 객체 속성이 쓰기 및 구성할 수 없는 데이터 속성인 경우, 속성 값을 대상 객체 속성의 값과 다르게 변경할 수 없습니다.
* 대상 객체 속성의 `[[Set]]` 속성이 `undefined` 인 구성 불가능한 접근자 속성인 경우, 속성 값을 설정할 수 없습니다.
* 엄격 모드에서 `set()` 처리기가 `false`를 반환하면 `TypeError` 예외가 발생합니다.
예제
--

### 속성 값 설정 트랩

다음 코드는 속성 값을 설정하는 것을 트랩합니다.


```js
const p = new Proxy(
  {},
  {
    set(target, prop, value, receiver) {
      target[prop] = value;
      console.log(`property set: ${prop} = ${value}`);
      return true;
    },
  },
);

console.log("a" in p); // false

p.a = 10; // "property set: a = 10"
console.log("a" in p); // true
console.log(p.a); // 10
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `Reflect.set()`
handler.has()
=============

**`handler.has()`** 메서드는 `in` 연산자에 대한 트랩입니다.

시도해보기
-----

구문
--


```js
new Proxy(target, {
  has(target, prop) {},
});
```

### 매개 변수

다음 매개변수는 `has()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체

`prop`

존재 여부를 확인할 속성의 이름 또는 `Symbol`

### 반환 값

`has()` 메서드는 불리언 값을 반환합니다.

설명
--

**`handler.has()`** 메서드는 `in` 연산자에 대한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* 속성 쿼리: `foo in proxy`
* 상속된 속성 쿼리: `foo in Object.create(proxy)`
* `with` 확인: `with(proxy) { (foo); }`
* `Reflect.has()`
### 불변 조건

다음 불변 조건이 위반되면 프록시에서 `TypeError`가 발생합니다.

* 속성이 대상 객체의 구성할 수 없는 자체 속성으로 존재하는 경우, 속성이 존재하지 않는 것으로 보고될 수 없습니다.
* 속성이 대상 객체의 자체 속성으로 존재하고 대상 객체가 확장될 수 없는 경우, 속성이 존재하지 않는 것으로 보고될 수 없습니다.
예제
--

### in 연산자 트랩

다음 코드는 `in` 연산자를 트랩합니다.


```js
const p = new Proxy(
  {},
  {
    has(target, prop) {
      console.log(`called: ${prop}`);
      return true;
    },
  },
);

console.log("a" in p); // "called: a"
// true
```


다음 코드는 불변 조건을 위반합니다.


```js
const obj = { a: 10 };
Object.preventExtensions(obj);

const p = new Proxy(obj, {
  has(target, prop) {
    return false;
  },
});

"a" in p; // TypeError is thrown
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `in` 연산자
* `Reflect.has()`
handler.get()
=============

**`handler.get()`** 메서드는 속성 값을 가져오기 위한 트랩입니다.

시도해보기
-----

구문
--


```js
new Proxy(target, {
  get(target, property, receiver) {},
});
```

### 매개 변수

다음 매개변수는 `get()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체

`property`

가져올 속성의 이름 또는 `Symbol`입니다.

`receiver`

프록시 또는 프록시에서 상속되는 객체입니다.

### 반환 값

`get()` 메서드는 어떤 값이든 반환할 수 있습니다.

설명
--

**`handler.get()`** 메서드는 속성 값을 가져오기 위한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* 속성 접근: `proxy[foo]`와
 `proxy.bar`
* 상속된 속성 액세스:
 `Object.create(proxy)[foo]`
* `Reflect.get()`
### 불변 조건

다음 불변량이 위반되면 프록시에서 `TypeError`가 발생합니다.

* 대상 객체의 속성이 쓸 수 없거나 구성할 수 없는 자체 데이터 속성인 경우, 속성에 대해 보고된 값은 대상 객체 속성의 값과 동일해야 합니다.
* 대상 객체 속성이 `[[Get]]` 특성이 `undefined`인 구성할 수 없는 자체 접근자 속성인 경우, 속성에 대해 보고된 값은 정의되지 않아야 합니다.
예제
--

### 속성 값을 얻기 위한 트랩

다음 코드는 속성 값을 가져오는 것을 트랩합니다.


```js
const p = new Proxy(
  {},
  {
    get(target, property, receiver) {
      console.log(`called: ${property}`);
      return 10;
    },
  },
);

console.log(p.a); // "called: a"
// 10
```


다음 코드는 불변 조건을 위반합니다.


```js
const obj = {};
Object.defineProperty(obj, "a", {
  configurable: false,
  enumerable: false,
  value: 10,
  writable: false,
});

const p = new Proxy(obj, {
  get(target, property) {
    return 20;
  },
});

p.a; // TypeError is thrown
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `Reflect.get()`
handler.ownKeys()
=================

**`handler.ownKeys()`** 메서드는 `Reflect.ownKeys()`에 대한 트랩입니다.

시도해보기
-----

구문
--


```js
new Proxy(target, {
  ownKeys(target) {},
});
```

### 매개 변수

다음 매개변수는 `ownKeys()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체

### 반환 값

`ownKeys()` 메서드는 열거 가능한 객체를 반환합니다.

설명
--

**`handler.ownKeys()`** 메서드는 `Reflect.ownKeys()`에 대한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* `Object.getOwnPropertyNames()`
* `Object.getOwnPropertySymbols()`
* `Object.keys()`
* `Reflect.ownKeys()`
### 불변 조건

다음 불변 조건이 위반되면 프록시에서 `TypeError`가 발생합니다.

* `ownKeys()`의 결과는 배열이어야 합니다.
* 각 배열 요소의 유형은 `String` 또는 `Symbol`입니다.
* 결과 목록에는 대상 객체의 구성할 수 없는 모든 고유 속성의 키가 포함되어야 합니다.
* 대상 개체를 확장할 수 없는 경우, 결과 목록에는 대상 객체의 자체 속성에 대한 모든 키가 포함되어야 하며, 다른 값은 포함되지 않아야 합니다.
예제
--

### getOwnPropertyNames 트랩

다음 코드는 `Object.getOwnPropertyNames()`를 트랩합니다.


```js
const p = new Proxy(
  {},
  {
    ownKeys(target) {
      console.log("called");
      return ["a", "b", "c"];
    },
  },
);

console.log(Object.getOwnPropertyNames(p)); // "called"
// [ 'a', 'b', 'c' ]
```


다음 코드는 불변 조건을 위반합니다.


```js
const obj = {};
Object.defineProperty(obj, "a", {
  configurable: false,
  enumerable: true,
  value: 10,
});

const p = new Proxy(obj, {
  ownKeys(target) {
    return [123, 12.5, true, false, undefined, null, {}, []];
  },
});

console.log(Object.getOwnPropertyNames(p));

// TypeError: proxy [[OwnPropertyKeys]] must return an array
// with only string and symbol elements
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `Object.getOwnPropertyNames()`
* `Reflect.ownKeys()`
handler.apply()
===============

**`handler.apply()`** 메서드는 함수 호출에 대한 트랩입니다.

시도해보기
-----

구문
--


```js
var p = new Proxy(target, {
  apply: function (target, thisArg, argumentsList) {},
});
```

### 매개 변수

 다음 매개변수는 `apply()` 메소드에 전달됩니다.
 `this`는 핸들러에 바인딩됩니다.

`target`

호출할 수 있는 대상 객체

`thisArg`

호출에 대한 `this` 인수

`argumentsList`

호출에 대한 인수 목록

### 반환 값

`apply()` 메서드는 어떤 값이든 반환할 수 있습니다.

설명
--

**`handler.apply()`** 메서드는 함수 호출에 대한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* `proxy(...args)`
* `Function.prototype.apply()`와 `Function.prototype.call()`
* `Reflect.apply()`
### 불변 조건

다음 불변 조건이 위반되면 프록시는 `TypeError`를 발생시킵니다.

대상 객체는 그 자체로 호출이 가능해야합니다. 즉, 함수 객체여야 합니다.

예제
--

### 함수 호출 가로채기

다음 코드는 함수 호출을 트랩합니다.


```js
const p = new Proxy(function () {}, {
  apply(target, thisArg, argumentsList) {
    console.log(`called: ${argumentsList}`);
    return argumentsList[0] + argumentsList[1] + argumentsList[2];
  },
});

console.log(p(1, 2, 3)); // "호출: 1,2,3"
// 6
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `Function.prototype.apply()`
* `Function.prototype.call()`
* `Reflect.apply()`
handler.getOwnPropertyDescriptor()
==================================

**`handler.getOwnPropertyDescriptor()`** 메서드는 `Object.getOwnPropertyDescriptor()`에 대한 트랩입니다.

시도해보기
-----

구문
--


```js
new Proxy(target, {
  getOwnPropertyDescriptor(target, prop) {},
});
```

### 매개 변수

다음 매개변수는 `getOwnPropertyDescriptor()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체

`prop`

검색해야 하는 속성의 이름

### 반환 값

`getOwnPropertyDescriptor()` 메서드는 객체를 반환하거나 `undefined`를 반환합니다.

설명
--

**`handler.getOwnPropertyDescriptor()`** 메서드는 `Object.getOwnPropertyDescriptor()`에 대한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* `Object.getOwnPropertyDescriptor()`
* `Reflect.getOwnPropertyDescriptor()`
### 불변 조건

다음 불변 조건이 위반되면 프록시에서 `TypeError`가 발생합니다.

* `getOwnPropertyDescriptor()`는 객체 또는 `undefined`를 반환해야 합니다.
* 속성이 대상 객체의 구성할 수 없는 자체 속성으로 존재하는 경우, 속성이 존재하지 않는 것으로 보고될 수 없습니다.
* 속성이 대상 객체의 자체 속성으로 존재하고 대상 객체가 확장할 수 없는 경우, 속성이 존재하지 않는 것으로 보고될 수 없습니다.
* 속성이 대상 객체의 자체 속성으로 존재하지 않고 대상 객체가 확장 가능하지 않은 경우, 속성이 있는 것으로 보고될 수 없습니다.
* 속성이 대상 객체의 자체 속성으로 존재하지 않거나 대상 객체의 구성 가능한 자체 속성으로 존재하는 경우, 속성을 구성 불가능한 것으로 보고할 수 없습니다.
* `Object.getOwnPropertyDescriptor(target)`의 결과는 `Object.defineProperty()`를 사용하여 대상 객체에 적용할 수 있으며 예외를 발생시키지 않습니다.
예제
--

### getOwnPropertyDescriptor 트랩

다음 코드는 `Object.getOwnPropertyDescriptor()`를 트래핑합니다.


```js
const p = new Proxy(
  { a: 20 },
  {
    getOwnPropertyDescriptor(target, prop) {
      console.log(`called: ${prop}`);
      return { configurable: true, enumerable: true, value: 10 };
    },
  },
);

console.log(Object.getOwnPropertyDescriptor(p, "a").value); // "called: a"
// 10
```


다음 코드는 불변 조건을 위반합니다.


```js
const obj = { a: 10 };
Object.preventExtensions(obj);
const p = new Proxy(obj, {
  getOwnPropertyDescriptor(target, prop) {
    return undefined;
  },
});

Object.getOwnPropertyDescriptor(p, "a"); // TypeError is thrown
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `Object.getOwnPropertyDescriptor()`
* `Reflect.getOwnPropertyDescriptor()`
handler.setPrototypeOf()
========================

**`handler.setPrototypeOf()`** 메서드는 `Object.setPrototypeOf()` (en-US)에 대한 트랩입니다.

시도해보기
-----

구문
--


```js
new Proxy(target, {
  setPrototypeOf(target, prototype) {},
});
```

### 매개변수

다음 매개변수는 `setPrototypeOf()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체

`prototype`

대상 객체의 새 프로토타입 또는 `null`

### 반환 값

`setPrototypeOf()` 메서드는 `[[Prototype]]`이 성공적으로 변경되었으면 `true`를 반환하고 그렇지 않으면 `false`를 반환합니다.

설명
--

**`handler.setPrototypeOf()`** 메서드는 `Object.setPrototypeOf()` (en-US)에 대한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* `Object.setPrototypeOf()` (en-US)
* `Reflect.setPrototypeOf()`
### 불변 조건

다음 불변 조건이 위반되면 프록시에서 `TypeError`가 발생합니다.

* `target`을 확장할 수 없는 경우, 프로토타입 매개변수는 `Object.getPrototypeOf(target)`과 동일한 값이어야 합니다.
예제
--

객체에 대한 새 프로토타입 설정을 허용하지 않으려면 처리기의 `setPrototypeOf()` 메서드에서 `false`를 반환하거나 예외를 발생시키면 됩니다.

### 접근 방식 1: false 반환하기

이 접근 방식은 변경 실패 시 예외를 발생시키는 모든 작업이 해당 작업 자체에서 직접 예외를 생성해야 함을 뜻합니다.

예를 들어 `Object.setPrototypeOf()` (en-US)가 `TypeError`를 발생시킬때, `Reflect.setPrototypeOf()`와 같이 실패 시 일반적으로 예외를 발생시키지않는 연산이 수행된다면 예외가 발생하지 **않습니다.**


```js
const handlerReturnsFalse = {
  setPrototypeOf(target, newProto) {
    return false;
  },
};

const newProto = {},
  target = {};

const p1 = new Proxy(target, handlerReturnsFalse);
Object.setPrototypeOf(p1, newProto); // throws a TypeError
Reflect.setPrototypeOf(p1, newProto); // returns false
```

### 접근 방식 2: 예외 발생 시키기

후자의 접근 방식은 변경을 시도하거나 예외를 발생시키는 **모든** 작업을 실행시킵니다. 이 접근 방식은 예외가 발생하지 않는 작업도 실패 시 예외가 발생하거나 사용자 지정 예외 값을 발생시키려는 경우에 좋은 선택지가 될 수 있습니다.


```js
const handlerThrows = {
  setPrototypeOf(target, newProto) {
    throw new Error("custom error");
  },
};

const newProto = {},
  target = {};

const p2 = new Proxy(target, handlerThrows);
Object.setPrototypeOf(p2, newProto); // throws new Error("custom error")
Reflect.setPrototypeOf(p2, newProto); // throws new Error("custom error")
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-setprototypeof-v |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `Object.setPrototypeOf()` (en-US)
* `Reflect.setPrototypeOf()`
handler.isExtensible()
======================

**`handler.isExtensible()`** 메서드는 `Object.isExtensible()`에 대한 트랩입니다.

시도해보기
-----

구문
--


```js
new Proxy(target, {
  isExtensible(target) {},
});
```

### 매개 변수

다음 매개변수는 `isExtensible()` 메서드에 전달됩니다. `this`는 처리기에 바인딩됩니다.

`target`

대상 객체

### 반환 값

`isExtensible()` 메서드는 불리언 값을 반환합니다.

설명
--

**`handler.isExtensible()`** 메서드는 `Object.isExtensible()`에 대한 트랩입니다.

### 가로채기

이 트랩은 다음 작업을 가로챌 수 있습니다.

* `Object.isExtensible()`
* `Reflect.isExtensible()`
### 불변 조건

다음 불변 조건이 위반되면 프록시에서 `TypeError`가 발생합니다.

* `Object.isExtensible(proxy)`는 반드시 `Object.isExtensible(target)`와 같은 값을 반환해야합니다.
예제
--

### isExtensible 트랩

다음 코드는 `Object.isExtensible()`를 트랩합니다.


```js
const p = new Proxy(
  {},
  {
    isExtensible(target) {
      console.log("called");
      return true;
    },
  },
);

console.log(Object.isExtensible(p)); // "called"
// true
```


다음 코드는 불변 조건을 위반합니다.


```js
const p = new Proxy(
  {},
  {
    isExtensible(target) {
      return false;
    },
  },
);

Object.isExtensible(p); // TypeError is thrown
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-proxy-object-internal-methods-and-internal-slots-isextensible |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Proxy`
* `Proxy()` 생성자
* `Object.isExtensible()`
* `Reflect.isExtensible()`
* `Reflect.preventExtensions()`
BigUint64Array() constructor
============================

**`BigUint64Array()`** 생성자는 플랫폼의 바이트 순서를 따르는 64비트 부호 없는 정수의 형식화 배열(TypedArray)
 `BigUint64Array`을 생성합니다. 배열의 내용은 `0n`으로 초기화됩니다. 배열이 생성되면 객체의 메서드를
 사용하거나 표준 배열 인덱스 구문(즉, 대괄호 표기법 사용)을 사용하여 배열의 요소를 참조할 수 있습니다.

구문
--


```js
new BigUint64Array()
new BigUint64Array(length)
new BigUint64Array(typedArray)
new BigUint64Array(object)

new BigUint64Array(buffer)
new BigUint64Array(buffer, byteOffset)
new BigUint64Array(buffer, byteOffset, length)
```


**참고:** `BigUint64Array()`는 오직
 `new`로만 생성할 수 있습니다.
 `new` 없이 호출하면 `TypeError` 예외가 발생합니다.


### 매개변수

`TypedArray`를 참조하세요.

### 예외

`TypedArray`를 참조하세요.

예제
--

### `BigUint64Array`을 생성하기 위한 각기 다른 방법


```js
// 길이로부터
const biguint64 = new BigUint64Array(2);
biguint64[0] = 42n;
console.log(biguint64[0]); // 42n
console.log(biguint64.length); // 2
console.log(biguint64.BYTES\_PER\_ELEMENT); // 8

// 배열로부터
const x = new BigUint64Array([21n, 31n]);
console.log(x[1]); // 31n

// 다른 TypedArray로부터
const y = new BigUint64Array(x);
console.log(y[0]); // 21n

// ArrayBuffer로부터
const buffer = new ArrayBuffer(64);
const z = new BigUint64Array(buffer, 8, 4);
console.log(z.byteOffset); // 8

// 순회로부터
const iterable = (function\* () {
  yield\* [1n, 2n, 3n];
})();
const biguint64FromIterable = new BigUint64Array(iterable);
console.log(biguint64FromIterable);
// BigUint64Array [1n, 2n, 3n]
```

명세서
---

| Specification |
| --- |
| ECMAScript Language Specification # sec-typedarray-constructors |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* JavaScript 형식화 배열
* `BigInt64Array`
* `DataView`
Math.cbrt()
===========

**`Math.cbrt()`** 함수는 주어진 수의 세제곱근을 반환합니다. 즉,



M
a
t
h
.
c
b
r
t
(
x
)

=

x
3

=
the unique

y

such that

y
3

=
x

 \mathtt{Math.cbrt(x)} = \sqrt[3]{x} = \text{the unique}
 ; y ; \text{such that} ; y^3 = x


구문
--


```js
Math.cbrt(x);
```

### 매개변수

`x`

숫자.

### 반환 값

주어진 수의 세제곱근.

설명
--

`cbrt()`는 `Math`의 정적 메서드이므로, 사용자가 생성한 `Math` 객체의 메서드로 호출할 수 없고 항상 `Math.cbrt()`를 사용해야 합니다. (`Math`는 생성자가 아닙니다)

예제
--

### `Math.cbrt()` 사용하기


```js
Math.cbrt(NaN); // NaN
Math.cbrt(-1); // -1
Math.cbrt(-0); // -0
Math.cbrt(-Infinity); // -Infinity
Math.cbrt(0); // 0
Math.cbrt(1); // 1
Math.cbrt(Infinity); // Infinity
Math.cbrt(null); // 0
Math.cbrt(2); // 1.2599210498948734
```

폴리필
---

모든 


x
≥
0

x \geq 0

에서 


x
3

=

x

1
/
3

\sqrt[3]{x} = x^{1/3}

 이므로, `Math.cbrt()`는 다음 함수로 폴리필할 수 있습니다.


```js
if (!Math.cbrt) {
  Math.cbrt = (function (pow) {
    return function cbrt() {
      // ensure negative numbers remain negative:
      return x < 0 ? -pow(-x, 1 / 3) : pow(x, 1 / 3);
    };
  })(Math.pow); // localize Math.pow to increase efficiency
}
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-math.cbrt |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Math.pow()`
* `Math.sqrt()`
Math.LOG2E
==========

**`Math.LOG2E`** 속성은 e의 로그 2 값, 약 1.442의 값을 가집니다.


Math.LOG2E

=

log
2

(
e
)
≈
1.442

\mathtt{\mi{Math.LOG2E}} = \log\_2(e) \approx 1.442

시도해보기
-----

| Property attributes of `Math.LOG2E` |
| --- |
| Writable | 불가능 |
| Enumerable | 불가능 |
| Configurable | 불가능 |

설명
--

`LOG2E`는 `Math`의 정적 속성이므로, 사용자가 생성한 `Math` 객체의 속성으로 접근할 수 없고 항상 `Math.LOG2E`를 사용해야 합니다. (`Math`는 생성자가 아닙니다)

설명
--

### `Math.LOG2E` 사용하기

다음 함수는 e의 로그 2 값을 반환합니다.


```js
function getLog2e() {
  return Math.LOG2E;
}

getLog2e(); // 1.4426950408889634
```

명세
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-math.log2e |

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `Math.exp()`
* `Math.log()`
* `Math.log2()`