"구성함수'라고 하면 대부분의 사람들은 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>
키워드 호출 함수
함수 첫 글자는 대문자로 표기
인터뷰를 하다 보면 생성자에 관해 두 가지 질문을 자주 합니다.
생성자의 첫 글자를 대문자로 써야 하나요?
new
키워드를 사용하지 않고 생성자를 직접 실행하면 오류가 발생하나요? 오류가 발생하지 않으면 new
을 사용하여 생성자를 호출하는 것과 new
를 사용하지 않고 생성자를 호출하는 것의 차이점은 무엇입니까?
기본적으로 100%의 학생이 질문 1에 올바르게 답할 수 있으며(대문자와 소문자 모두), 20%의 학생이 질문 2, 특히 두 번째 질문에 틀리게 답합니다.
그럼 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
를 사용하여 생성자를 호출하면 함수 내에서 다음과 같은 변경이 발생합니다. 🎜>
변수를 만듭니다. 그리고 객체는
가 ;
이 개체를 암시적으로 반환합니다(다른 개체가 명시적으로 반환되지 않은 경우)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
생성자를 직접 호출한 결과는 우리가 원하는 결과가 아니라는 것을 알 수 있습니다. Person
3. 요약
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!