JavaScript 생성자에 대한 간략한 토론

PHPz
풀어 주다: 2017-04-04 10:26:06
원래의
1695명이 탐색했습니다.

"구성함수'라고 하면 대부분의 사람들은 Java 클래스의 개념인 JavaScript에도 생성자가 있고 그 사용 구문이 있다고 생각할 것입니다. Java와 유사하거나 객체 생성 구문은 다른 클래스 기반 언어와 유사합니다.

JavaScript 생성자는 다음과 같은 특징을 갖는 특수한 유형의 함수입니다.

  • 사용<a href="http://www.php.cn%20/wiki%20/165.html" target="_blank">new<code><a href="http://www.php.cn/wiki/165.html" target="_blank">new</a>키워드 호출 함수

  • 함수 첫 글자는 대문자로 표기

인터뷰를 하다 보면 생성자에 관해 두 가지 질문을 자주 합니다.

  1. 생성자의 첫 글자를 대문자로 써야 하나요?

  2. new 키워드를 사용하지 않고 생성자를 직접 실행하면 오류가 발생하나요? 오류가 발생하지 않으면 new을 사용하여 생성자를 호출하는 것과 new를 사용하지 않고 생성자를 호출하는 것의 차이점은 무엇입니까?

기본적으로 100%의 학생이 질문 1에 올바르게 답할 수 있으며(대문자와 소문자 모두), 20%의 학생이 질문 2, 특히 두 번째 질문에 틀리게 답합니다.

그럼 new 연산자 가 무엇을 하는지 살펴볼까요?

1. new 연산자를 사용하여 함수

예:

function Person(name){
  this.name = name;
  this.say = function(){
    return "I am " + this.name;
  }
}

var person1 = new Person('nicole');
person1.say(); // "I am nicole"
로그인 후 복사

new를 사용하여 생성자를 호출하면 함수 내에서 다음과 같은 변경이 발생합니다. 🎜>

  • 빈 개체를 가리키는 this

    변수를 만듭니다. 그리고 객체는

  • 속성과 메서드

    ;

    이 개체를 암시적으로 반환합니다(다른 개체가 명시적으로 반환되지 않은 경우)
  • 위 변경 사항을 보여주기 위해 의사 프로그램을 사용합니다.
function Person(name){
  // 创建this变量,指向空对象
  var this = {}; 
  // 属性和方法被加入到this引用的对象中
  this.name = name;
  this.say = function(){
    return "I am " + this.name;
  }
  // 返回this对象
  return this;
}
로그인 후 복사

을 사용하여 생성자를 호출하는 가장 큰 특징은

객체가 생성자가 생성한 new 객체를 가리키므로 this 문자열 : "I am nicole"을 반환합니다. person1.say()

小贴士

如果指定了返回对象,那么,"this"对象可能被丢失。

function Person(name){
  this.name = name;
  this.say = function(){
    return "I am " + this.name;
  }
  var that = {};
  that.name = "It is that!";
  return that;
}

var person1 = new Person('nicole');
person1.name; // "It is that!"
로그인 후 복사
2. 함수를 직접 호출합니다. 함수를 직접 호출하면

객체가

을 가리키며, 기본적으로 객체가 반환되지 않습니다(반환하지 않는 한). 값은 명시적으로 선언됩니다).

this window 함수를 예로 들어

함수를 직접 호출해 보겠습니다.

var person1 = Person('nicole');
person1; // undefined
window.name; // nicole
로그인 후 복사
Person 생성자를 직접 호출한 결과는 우리가 원하는 결과가 아니라는 것을 알 수 있습니다. Person3. 요약

키워드 사용을 잊어버려서 생성자를 호출하는 것을 방지하기 위해

키워드를 강제로 호출하도록 몇 가지 판단 조건을 추가할 수 있습니다. 코드는 다음과 같습니다:

function Person(name){
  if (!(this instanceof Person)) {
    return new Person(name);
  }
  this.name = name;
  this.say = function(){
    return "I am " + this.name;
  }
}

var person1 = Person('nicole');
console.log(person1.say()); // I am nicole
var person2 = new Person('lisa');
console.log(person2.say()); // I am lisa
로그인 후 복사
new new

위 내용은 JavaScript 생성자에 대한 간략한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿