Posted at

생성자 함수 "new"

생성자 함수는 기술적으로 정규 함수입니다. 그래도 두 가지 규칙이 있습니다.

1.이름은 대문자로 시작합니다.

2.그들은 단지 "new"운영자 와 함께 실행되어야합니다 .


file.js

function User(name) {

this.name = name;
this.isAdmin = false;
};

let user = new User("Jack");
alert(user.name); // Jack
alert(user.isAdmin); //false


new User(...)다음과 같이됩니다.


file.js

function User(name){

//this = {};

// add properties to this
this.name = name;
this.isAdmin = false
}

//new User("Jack")는 다음과 같은 객체이다
let user = {
name: "Jack",
isAdmin = flase
}


우리가 다른 사용자를 만들려면 이제, 우리는 호출 할 수 있습니다 new User("Ann"), new User("Alice")등등합니다. 매번 리터럴을 사용하는 것보다 훨씬 짧고 읽기 쉽습니다.

재사용 가능한 객체 생성 코드를 구현하는 것이 생성자의 주요 목적입니다.

기술적으로 모든 함수를 생성자로 사용할 수 있습니다. 즉 : 모든 함수를 실행할 수 있으며 new위의 알고리즘을 실행합니다. "대문자 우선"은 기능이 실행되어야 함을 명확히하기위한 일반적인 합의입니다.


file.js

function User(name){

//this = {};

// add properties to this
this.name = name;
this.isAdmin = false
}

//new User("Jack")는 다음과 같은 객체이다
let user = {
name: "Jack",
isAdmin = flase
}

function BigUser() {
this.name = "Johin";
return {
name: "Godzilla"
}
}

alert(new BigUser().name);

function smallUser() {
this.name = "John";
return;
}
alert(new smallUser().name); //John


괄호생략

인수가 없는경우 괄호를 생략할수 있다


file.js

let user = new User; // <-- no parentheses

// same as
let user = new User();

괄호를 생략하는 것은 "좋은 스타일"로 간주되지 않지만 구문에 의해 허용됩니다.


생성자의 method


file.js

function User(name) {

this.name = name;
this.sayHi = function() {
alert("My name is :"+this.name);
}
}

let john = new User("John");
John.sayHi();

/*
john = {
name:"John",
sayHi: function() {
alert("My name is":+this.name);
}
}



file.js

let obj = {};

function A() {
return obj;
}

function B() {
return obj;
}

let a = new A();
let b = new B();

alert(a == b



file.js


function A() {

}

function B() {

}

let a = new A();
let b = new B();

alert(a == b