<strong>prototype 속성의 역할: <br></strong>prototype 속성을 사용하여 객체 클래스의 기본 기능 집합을 제공합니다. 객체의 새로운 인스턴스는 객체의 프로토타입에 할당된 작업을 "상속"합니다. <br><br><strong>프로토타입 속성의 기능: </strong> <br>모든 JavaScript 내부 개체에는 읽기 전용 프로토타입 속성이 있습니다. 내부 객체의 프로토타입에 기능을 추가할 수 있지만 객체에 다른 프로토타입을 부여할 수는 없습니다. <br>그러나 사용자 정의 개체를 새 프로토타입에 할당할 수 있습니다. <br><br><strong>생성자 속성의 역할: <br></strong>생성자는 객체를 생성하는 함수를 나타냅니다. <br><br><strong>생성자 속성의 기능: </strong> <br>생성자 속성은 프로토타입이 있는 모든 객체의 멤버입니다. 여기에는 Global 및 Math 개체를 제외한 모든 JavaScript 내부 개체가 포함됩니다. <br>생성자 속성은 특정 객체 인스턴스를 생성하는 함수에 대한 참조를 보유합니다. <br><br>A 프로토타입을 사용하여 객체 속성 추가 [방법 1] <br>예: <br><div class="codetitle"> <span><a style="CURSOR: pointer" data="43536" class="copybut" id="copybut43536" onclick="doCopy('code43536')"><u>코드 복사</u></a></span> 코드는 다음과 같습니다.</div> <div class="codebody" id="code43536"> <br><script type="text/javascript"> <br>//방법 1<br>var myObj = function(){ <br>this.study = "JavaScript"; <br>} <br>myObj.prototype.hobby = function() <br>{ <br>this.hobby = "여자 보기" <br>} <br>var newObj = new myObj() ; <br> for ( var attr in newObj ) <br>{ <br>document.write( attr "<br/>" ) <br></script> > <br> <br>B 프로토타입을 사용하여 객체 속성 추가 [방법 2] </div>예: <br><br><br><br><div class="codetitle">코드 복사<span><a style="CURSOR: pointer" data="35250" class="copybut" id="copybut35250" onclick="doCopy('code35250')"><u> 코드는 다음과 같습니다.</u></a> </span><script type="text/javascript"> </div>//방법 2<div class="codebody" id="code35250">var superObj = { name:"xugang" }; >var subObj = { age:20 }; <br>function extend(superObj,subObj){ <br>//상위 객체의 프로토타입 객체 가져오기<br>subObj.getSuper = superObj.prototype; 상위 개체의 속성을 하위 개체에 부여<br>for(var i in superObj){ <br>subObj[i] = superObj[i] <br>} <br>} <br>extend(superObj, subObj); <br>for ( var s in subObj ) <br>{ <br>document.write( s "<br/>" ) //하위 객체의 속성 탐색 <br>} <br></script> <br><br> <br> <br>C는 프로토타입을 사용하여 상위 클래스의 프로토타입 속성을 상속합니다.<br>예: <br> </div> <br><br><br>코드 복사<br><div class="codetitle"> <span> 코드는 다음과 같습니다.<a style="CURSOR: pointer" data="13223" class="copybut" id="copybut13223" onclick="doCopy('code13223')"><u> </u><script> </a>function Person(_name){ </span>this.name = _name; </div>} <div class="codebody" id="code13223">//객체 생성(프로토타입 프로토타입 객체 변경에 사용) <br>function addSex(_sex){ <br>this.sex = <br>} <br>//프로토타입 객체 변경 <br>Person.prototype = new addSex('male'); <br>var p = new Person( 'xugang') <br>alert("p의 프로토타입: " p.constructor); //모든 속성 인쇄<br>for(var i in p){ <br>//alert(p[ i]) <br><br>// ========= ======== 상속================ = <br>//하위 객체 Student 생성 <br>function Student(_study){ <br>this .study = _study; <br>} <br>// 프로토타입을 통해 Person 상속 <br>Student.prototype = new Person('Andy Lau') <br>var stu1 = new Student('JS'); <br>alert("stu1의 프로토타입: " stu1.constructor); <br>for(var i in stu1){ <br>alert(stu1[i]) <br></ script> <br><br> <br>Student 객체의 프로토타입이 Person 객체로 변경되고, Person 객체의 프로토타입이 addSex로 변경되므로 Student 객체의 프로토타입은 addSex입니다. <br>참고: 객체의 프로토타입은 새 객체가 생성되는 순간 결정됩니다. 새 객체 이후에 변경되면 무효화됩니다! <br><br>D 프로토타입 객체 및 객체 생성자를 설정하는 방법<br>예: <br><br> </div> <br><br>코드 복사<br><br><br> 코드는 다음과 같습니다: <br><div class="codetitle"> <span><script type="text/javascript"> <a style="CURSOR: pointer" data="52744" class="copybut" id="copybut52744" onclick="doCopy('code52744')">function B(){ <u>this.name = "Andy Lau" </u>return "메서드 B"; </a>} </span>function C(){ </div>this.age = 42; <div class="codebody" id="code52744">return "C 메서드" <br>} <br>B.prototype = new C() ; <br>var b = new B(); <br>b.constructor = B; //b의 생성자를 B 자체로 다시 작성<br>document.write("b의 생성자:"); .write(b .constructor() "<br/>"); <br>document.write("b의 프로토타입 객체 생성자 메서드: "); constructor() " <br/>"); <br>for ( var m in b ) <br>{ <br>document.write("속성: " m ) <br>document.write(" 값 : " b[ m] "<br/>"); <br>} <br></script> <br><br><br>결과는 다음과 같습니다. <br>b의 구성 방법: B 방법 <br>b의 프로토타입 객체 구성 방법: C 방법 <br> 속성: age 값: 42 <br> 속성: name 값: Andy Lau <br> <br>E 객체에 프로토타입을 저장하는 데 사용되는 __proto__ 변수<br>예: <br><div class="codetitle"> <span><a style="CURSOR: pointer" data="34181" class="copybut" id="copybut34181" onclick="doCopy('code34181')"><u>코드 복사</u></a></span> 코드 </div> <div class="codebody" id="code34181"> <br><script type="text/javascript"> <br>function myObject(){} <br>var my = new myObject()// 모든 객체에는 숨겨진 __proto__ 변수가 프로토타입을 저장하는 데 사용됩니다. <br>document.write(my.__proto__ "<br/>") <br>//Internet Explorer에서 정의되지 않음 <br>으로 표시됩니다. //Mozilla Firefox에서는 다음과 같이 표시됩니다: [object Object] <br><br>function Person(){ <br>this.name = "Andy Lau"; <br>return "Person method" <br>} <br>/* <br> 메서드를 정의한 후 메모리에서는 다음과 동일합니다. <br>Person.prototype = { constructor:Person } <br>*/ <br>//Person 객체의 프로토타입 객체 변경 <br>function Super_Person(){ <br>this .hobby = "Singing"; <br>return "Super_Person 메서드"; <br>} <br>Person.prototype = new Super_Person() <br>var newObj = new Person (); <br>/* 새 객체 생성 프로세스 사용: <br>var o = {} <br>Person.prototype.constructor.call(o) <br>o = {__proto__:Person.prototype,name = "앤디 라우"}; <br>return o; <br>*/ <br>document.write(newObj.constructor.prototype.constructor() "<br/>"); newObj 프로토타입 객체(IE에서는 유효하지 않습니다! ) <br>document.write(newObj.__proto__.constructor() "<br/>") <br></script> <br><br> <br>Firefox의 결과는 다음과 같습니다. </div>[객체 Object] <br>Super_Person 메서드<br>Super_Person 메서드</div>