프로토타입
1.
prototype은 Clone과 연관되어 있습니다.
즉, 인스턴스가 생성되면 프로토타입은 멤버를 클래스(함수)의 인스턴스로 복제합니다.
세부 사항: 다음과 같은 여러 내장 객체의 가장 일반적인 프로토타입: 배열 프로토타입에는 조인, 분할 메서드가 있습니다.
배열을 생성할 때 var a=[1,2], 프로토타입의 모든 메서드는 Clone입니다. 에.
2. 이는 클래스의 인스턴스 포인터입니다(이 포인터는 "동적으로 바인딩"됩니다). 이 js의 동적 바인딩을 이해하는 방법은 제가 작성한 다음 기사를 참조하세요. http://blog.never-online.net/article.asp?id=117
이 클래스의 인스턴스를 생성할 때 인스턴스는 pre- 모든 멤버가 this.p와 유사하게 정의되어 있습니다. 또한 프로토타입 프로토타입에 정의된 멤버가 있습니다. 클래스의 내부 정의가 프로토타입의 정의와 동일하면 재정의되지 않습니다.
이 예제를 보면 jsclass에 의해 정의된 this.func가 있습니다. 그리고 프로토타입에 정의된 func, jsclass 내부에 프로토타입의 멤버와 동일한 멤버가 있는 경우 인스턴스화 중 우선 순위는 this.func입니다. 그러나 func는 프로토타입에서 다시 작성되지 않지만 jsclass 인스턴스에 공통입니다. this.func만큼 우선순위는 높지 않지만 동시에 프로토타입과 클래스 내부적으로 정의된 멤버도 다음과 같이 이해할 수 있습니다.
위의 내용을 수정해 보겠습니다. 다시 코드를 작성하세요. 이렇게 보세요:
참고: 클래스 내부의 멤버는 삭제를 사용하여 삭제할 수 있지만 프로토타입에 정의된 멤버는 삭제 인스턴스 멤버 이름을 사용하여 삭제할 수 없습니다.
프로토타입으로 정의한 경우 인스턴스화 시: 프로토타입 인스턴스를 사용하여 생성할 객체의 유형을 지정하고, 이러한 프로토타입을 복사하여 새 객체를 생성합니다.
즉, 위의
delete a.func;/ /this <script> <BR>function jsclass() { <BR> this.p = "never-online"; <BR> this.func = function () { <BR> alert('func'); <BR> } <BR>} <BR>jsclass.prototype = { <BR> func : function () { <BR> alert(this.p); <BR> } <BR>} <BR>var a = new jsclass(); <BR>a.func(); <BR>delete a.func; <BR>a.func(); <BR></script>a.func() 클래스 내부에 정의된 func를 삭제합니다. //프로토타입 멤버 <script> <BR>function jsclass() { <BR> this.p = "never-online"; <BR> this.func = function () { <BR> alert('func'); <BR> } <BR>} <BR>jsclass.prototype = { <BR> func : function () { <BR> alert(this.p?this.p:'no value'); <BR> } <BR>} <BR>var a = new jsclass(); <BR>a.func();//调用内部成员 <BR>delete a.func;//此处删除是的类内部定义的func <BR>a.func();//调用prototype成员 <BR>delete a.func;//试图再次删除func(prototype) <BR>a.func();//删除无效(内部的func已经被删除),依然可打印输出 <BR></script>를 호출한 후 다시 a.func()를 호출하면 프로토타입.func를 호출하여 구현됩니다. a.func()가 아닙니다. jsclass 내부에서 func를 정의하고 프로토타입에서 func를 정의할 때 다시 작성하지 않는 이유도 설명됩니다.