======Javascript Objects====== * description : Javascript Object Constructors * author : 오션 * email : shlim@repia.com * lastupdate : 2021-05-03 \\ =====The source of this article===== [[https://www.w3schools.com/js/js_object_constructors.asp|Javascript Object Constructors]] \\ // Constructor function for Person Objects function Person(first, last, age, eye) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eye; } // Create a Person object let myFather = new Person("Anthony", "Young", 50, "green"); // Display age document.getElementById("demo").innerHTML = "My father is " + myFather.age + "."; // My father is 50. \\ 대문자 첫 번째 철자로 생성자 함수(constructor function)의 이름을 지정하는 것이 좋습니다. \\ =====Object Types (Blueprints) (Classes)===== 이전 챕터(JS Object Constructors)의 예제들은 제한적입니다. 그 예제들은 하나의 오브젝트만 만듭니다.\\ \\ 때때로 우리는 동일한 "type"의 많은 오브젝트를 생성하기 위해 "청사진"이 필요합니다.\\ \\ "오브젝트 타입"을 만드는 방법은 **오브젝트 생성자 함수(object constructor function)**를 사용하는 것입니다.\\ \\ 위의 예제에서 ''function Person()''은 오브젝트 생성자 함수입니다.\\ \\ ''new'' 키워드를 사용하여 생성자 함수를 호출하여 동일한 타입의 오브젝트를 만듭니다.\\ \\ // Constructor function for Person objects function Person(first, last, age, eye) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eye; } // Create two person objects let myFather = new Person("John", "Doe", 50, "blue"); let myMother = new Person("Sally", "Rally", 48, "green"); // Display age document.getElementById("demo").innerHTML = "My father is " + myFather.age + ". My mother is " + myMother.age + "."; // My father is 50. My mother is 48. \\ =====The this Keyword===== %%JavaScript%%에서 ''this''를 호출하는 것은 코드를 "소유"하는 오브젝트입니다.\\ \\ ''this''의 값은 오브젝트에서 사용될 때 오브젝트 자체입니다.\\ \\ 생성자 함수에서, ''this''는 값이 없고, 새로운 오브젝트를 대체합니다.\\ ''this''의 값은 새 오브젝트가 생성될 때 새 오브젝트가 됩니다.\\ \\ ''this''는 변수가 아닙니다. 키워드입니다. ''this''의 값은 변경할 수 없습니다. \\ =====Adding a Property to an Object===== 기존의 오브젝트에 새로운 프로퍼티를 추가하는 것은 쉽습니다.\\ ====Example==== // Constructor function for Person objects function Person(first, last, age, eye) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eye; } // Create 2 Person objects let myFather = new Person("John", "Doe", 50, "blue"); let myMother = new Person("Sally", "Rally", 48, "green"); // Add nationality to first object myFather.nationality = "English"; // Display nationality document.getElementById("demo").innerHTML = "My father is " + myFather.nationality; // My father is English \\ 프로퍼티는 myMother가 아닌(다른 person 오브젝트가 아닌) myFather에 추가됩니다.\\ \\ =====Adding a Method to an Object===== 기존의 오브젝트에 새로운 메서드를 추가하는 것은 쉽습니다:\\ ====Example==== // Constructor function for Person Objects function Person(first, last, age, eye) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eye; } // Create 2 Person objects let myFather = new Person("John", "Doe", 50, "blue"); let myMother = new Person("Sally", "Field", 48, "green"); // Add a name method to first object myFather.name = function () { return this.firstName + " " + this.lastName; }; // Display full Name document.getElementById("demo").innerHTML = "My father is " + myFather.name(); // My father is John Doe \\ =====Adding a Property to a Constructor===== 기존의 오브젝트에 새로운 프로퍼티를 추가한 방식으로 오브젝트 생성자에 새로운 프로퍼티를 추가할 수 없습니다.\\ ====Example==== // Constructor function for Person objects function Person(first, last, age, eye) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eye; } // You can NOT add a new property to a constructor function Person.nationality = "English"; // Create 2 Person objects let myFather = new Person("John", "Doe", 50, "blue"); let myMother = new Person("Sally", "Rally", 48, "green"); // Display nationality document.getElementById("demo").innerHTML = "The nationality of my Father is " + myFather.nationality; // The nationality of my Father is undefined \\ 생성자에 새로운 프로퍼티를 추가하기 위해, 생성자 함수에 새로운 프로퍼티를 추가해야 합니다.\\ \\ ====Example==== // Constructor function for Person objects function Person(first, last, age, eye) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eye; this.nationality = "English"; } // Create 2 Person objects let myFather = new Person("John", "Doe", 50, "blue"); let myMother = new Person("Sally", "Rally", 48, "green"); // Display nationality document.getElementById("demo").innerHTML = "My father is " + myFather.nationality + ". My mother is " + myMother.nationality; // My father is English. My mother is English \\ 위와 같은 방식으로 오브젝트 프로퍼티는 기본 값(default values)를 가질 수 있습니다.\\ =====Adding a Method to a Constructor===== 생성자 함수는 또한 메서드를 정의할 수 있습니다.\\ ====Example==== // Constructor function for Person Objects function Person(first, last, age, eye) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eye; this.name = function () { return this.firstName + " " + this.lastName }; }; // Create a Person object let myFather = new Person("John", "Doe", 50, "blue"); // Display full name document.getElementById("demo").innerHTML = "My father is " + myFather.name(); // My father is John Doe \\ 기존의 오브젝트에 새로운 메서드를 추가한 방식과 동일하게 오브젝트 생성자에 새로운 메서드를 추가할 수 없습니다.\\ \\ 오브젝트 생성자에 메서드를 추가하는 것은 생성자 함수 내부에서 이루어저야 합니다.\\ \\ ====Example==== function Person(firstName, lastName, age, eyeColor) { this.firstName = firstName; this.lastName = lastName; this.age = age; this.eyeColor = eyeColor; this.changeName = function (name) { this.lastName = name; }; } \\ changeName() 함수는 person의 lastName 프로퍼티에 이름 값을 할당합니다.\\ \\ ====Now You Can Try:==== // Constructor function for Person objects function Person(firstName, lastName, age, eyeColor) { this.firstName = firstName; this.lastName = lastName; this.age = age; this.eyeColor = eyeColor; this.changeName = function (name) { this.lastName = name; }; } // Create a Person object let myMother = new Person("Sally", "Rally", 48, "green"); // Change last name myMother.changeName("Doe"); // Display last name document.getElementById("demo").innerHTML = "My mother's last name is " + myMother.lastName; // My mother's last name is Doe \\ %%JavaScript%%는 **this**를 myMother로 "대체"하여 언급하는 person을 알고 있습니다.\\ \\ =====Built-in JavaScript Constructors===== %%JavaScript%%에는 네이티브 오브젝트에 대한 내장 생성자(built-in constructor)가 있습니다.\\ \\ ====Example==== let x1 = new Object(); // A new Object object let x2 = new String(); // A new String object let x3 = new Number(); // A new Number object let x4 = new Boolean(); // A new Boolean object let x5 = new Array(); // A new Array object let x6 = new RegExp(); // A new RegExp object let x7 = new Function(); // A new Function object let x8 = new Date(); // A new Date object // Display the type of all objects document.getElementById("demo").innerHTML = "x1: " + typeof x1 + "
" + // x1: object "x2: " + typeof x2 + "
" + // x2: object "x3: " + typeof x3 + "
" + // x3: object "x4: " + typeof x4 + "
" + // x4: object "x5: " + typeof x5 + "
" + // x5: object "x6: " + typeof x6 + "
" + // x6: object "x7: " + typeof x7 + "
" + // x7: function "x8: " + typeof x8 + "
"; // x8: object
\\ ''Math()'' 오브젝트는 목록에 없습니다. ''Math()''은 전역 개체입니다. ''new'' 키워드는 ''Math''에서 사용할 수 없습니다.\\ =====Did You Know?===== 위에서 볼 수 있듯이, %%JavaScript%%에는 원시 데이터 타입(primitive data types)인\\ ''String'', ''Number'' 및 ''Boolean''의 오브젝트 버전이 있습니다.\\ 그러나 복잡한 오브젝트를 만들 이유가 없습니다. 원시 값(primitive values)이 훨씬 빠릅니다.\\ \\ 또한:\\ \\ ''new Object()'' 대신 오브젝트 리터럴 ''%%{}%%''을 사용합니다.\\ \\ ''new String()'' 대신 문자열 리터럴 ''%%""%%''을 사용하십시오.\\ \\ ''new Number()'' 대신 숫자 리터럴 ''12345''를 사용하십시오.\\ \\ ''new Boolean()'' 대신 불리언 리터럴 ''true / false''를 사용하십시오.\\ \\ ''new Array()'' 대신 배열 리터럴 ''%%[]%%''을 사용하십시오.\\ \\ ''new RegExp()'' 대신 패턴 리터럴 ''%%/()/%%''을 사용하십시오.\\ \\ ''new Function()'' 대신 함수 표현식 ''%%() {}%%''을 사용하십시오.\\ \\ ====Example==== let x1 = {}; // object let x2 = ""; // string let x3 = 0; // number; let x4 = false; // boolean let x5 = []; // object (not array) let x6 = /()/; // object let x7 = function () { }; // function // Display the type of all document.getElementById("demo").innerHTML = "x1: " + typeof x1 + "
" + // x1:object "x2: " + typeof x2 + "
" + // x2:string "x3: " + typeof x3 + "
" + // x3:number "x4: " + typeof x4 + "
" + // x4:boolean "x5: " + typeof x5 + "
" + // x5:object "x6: " + typeof x6 + "
" + // x6:object "x7: " + typeof x7 + "
"; // x7: function
\\ =====String Objects===== 일반적으로 문자열은 기본 형식(''%%var firstName = "John"%%'')으로 생성됩니다. \\ \\ 그러나 ''new'' 키워드(''%%var firstName = new String ( "John")%%''를 사용하여 문자열을 오브젝트로 만들 수도 있습니다. \\ \\ [[https://www.w3schools.com/js/js_strings.asp|JS Strings]] 챕터에서 문자열이 오브젝트로 생성되지 않아야 하는 이유를 학습하세요.\\ =====Number Objects===== 일반적으로 숫자는 기본 형식(''var x = 123'')으로 생성됩니다.\\ \\ 그러나 ''new'' 키워드(%%var x = new Number (123)%%)를 사용하여 숫자를 오브젝트로 만들 수도 있습니다. \\ \\ [[https://www.w3schools.com/js/js_numbers.asp|JS Numbers]] 장에서 숫자가 오브젝트로 생성되지 않아야 하는 이유를 알아보십시오.\\ =====Boolean Objects===== 일반적으로 불리언은 기본 형식(var x = false)으로 생성됩니다\\ \\ 그러나 불리언은 ''new'' 키워드(var x = new Boolean (false))를 사용하여 객체로 만들 수도 있습니다.\\ \\ [[https://www.w3schools.com/js/js_object_constructors.asp|JS Booleans]] 챕터에서,\\ 불리언이 오브젝트로 생성되지 않아야 하는 이유를 학습합니다.\\ {{tag>오션 Javascript Objects Constructors}}