>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 'new' 연산자는 어떻게 객체를 생성하고 상속을 설정합니까?

JavaScript의 'new' 연산자는 어떻게 객체를 생성하고 상속을 설정합니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-27 01:46:30725검색

How Does the `new` Operator in JavaScript Create Objects and Establish Their Inheritance?

JavaScript에서 새로운 연산자의 내부 작동 원리 이해하기

프로토타입 체인과 유사하게 오해된 JavaScript의 지형이 근본적인 쿼리를 드러냅니다. : "new" 연산자는 객체 생성을 어떻게 조정하고 객체의 계보와 핵심 속성을 정의합니까?

new의 본질

이 수수께끼를 풀려면 대체 그림을 고려하십시오. :

function NEW(f) {
  var obj, ret, proto;

  // Examine `f.prototype`
  proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype;

  // Inherit from `proto`
  obj = Object.create(proto);

  // Invoke `f` with `obj` as `this`
  ret = f.apply(obj, Array.prototype.slice.call(arguments, 1));

  // Determine return type
  if (Object(ret) === ret) { // Object returned?
    return ret;
  }

  // Otherwise, return inherited object
  return obj;
}

메커니즘 이해

새 연산자는 다음과 같은 내부 [[Construct]] 메커니즘을 사용합니다.

  1. 기본 객체를 생성합니다.
  2. 해당 [[Prototype]]을 함수의 프로토타입 또는 Object.prototype으로 설정합니다(프로토타입이 원시인 경우).
  3. 객체를 "this.prototype"으로 사용하여 함수를 호출합니다. "
  4. 함수가 프리미티브를 반환하는 경우 내부적으로 생성된 객체를 반환하고, 객체를 반환하는 경우 함수가 반환하는 객체를 반환합니다.

실용 응용

이 개념의 힘을 보여줍니다:

function Foo(arg) {
  this.prop = arg;
}
Foo.prototype.inherited = 'baz';

var obj = NEW(Foo, 'bar');

이것은 "상속된" 상속 속성과 "bar" 값을 가진 "prop" 속성을 사용하여 Foo에서 상속하는 객체를 생성합니다.

위 내용은 JavaScript의 'new' 연산자는 어떻게 객체를 생성하고 상속을 설정합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.