JS에서 프로토타입은 JS에서 이해하기 어려운 부분입니다
이 글은 다음 지식 포인트를 바탕으로 작성되었습니다:
1 프로토타입 디자인 패턴
에서 .Net, clone()을 사용하여 프로토타입 메서드를 구현할 수 있습니다
프로토타입 메서드의 주요 아이디어는 이제 클래스 A가 있고 프로토타입된 클래스 B를 만들고 싶다는 것입니다. by A. 그리고 확장될 수 있습니다. 우리는 B의 원형을 A라고 부릅니다.
2개의 JavaScript 메소드는 세 가지 범주로 나눌 수 있습니다:
a -> 클래스 메소드
b -> 객체 방법
c -> 프로토타입 방법
🎜>
function People(name){ //对象属性 this.name=name; //对象方法 this.Introduce=function(){ alert("My name is "+this.name); } } //类静态方法 People.Run=function(){ alert("I can run"); } //原型方法 People.prototype.IntroduceChinese=function(){ alert("我的名字是"+this.name); } //测试 var p1=new People("Windking"); p1.Introduce();//调用对象方法 People.Run();//调用静态方法 p1.IntroduceChinese(); //调用原型方法
3. obj1.func.call(obj) 메서드
는 obj를 obj1로 처리하는 것을 의미합니다. func 메소드를 호출할 때 원래는 obj1의 func 메소드가 호출되었는데, obj를 전달한 후 context 객체가 변경되어 obj 객체를 통해 ojb1의 메소드가 호출되었습니다. :
Javascript의 모든 객체에는 프로토타입 속성이 있습니다. Javascript에서 객체의 프로토타입 속성에 대한 설명은 객체 유형의 프로토타입에 대한 참조를 반환한다는 것입니다.
A.prototype = new B();프로토타입을 이해하는 것을 상속과 혼동해서는 안 됩니다. A의 프로토타입은 B의 인스턴스입니다. A가 B의 모든 메서드와 속성을 복제한 것으로 이해할 수 있습니다. A는 B의 메서드와 속성을 사용할 수 있습니다. 여기서 강조점은 상속보다는 복제에 있습니다. 이런 상황이 발생할 수 있습니다. A의 프로토타입은 B의 인스턴스이고 B의 프로토타입도 A의 인스턴스입니다.
먼저 실험적인 예를 살펴보겠습니다.function baseClass(){ this.showMsg = function(){ alert("baseClass::showMsg"); } } function extendClass(){ } extendClass.prototype = new baseClass(); var instance = new extendClass(); instance.showMsg(); // 显示baseClass:showMsg
function baseClass(){ this.showMsg = function(){ alert("baseClass::showMsg"); } } function extendClass(){ this.showMsg =function (){ alert("extendClass::showMsg"); } } extendClass.prototype = new baseClass(); var instance = new extendClass(); instance.showMsg();//显示extendClass::showMsg
함수가 실행되면 먼저 온톨로지에서 함수를 검색하고, 발견되지 않으면 프로토타입에서 함수를 검색합니다. 또는 프로토타입이 동일한 이름을 가진 함수를 복제하지 않을 것이라고 이해할 수 있습니다.
그러면 새로운 질문이 생길 것입니다:extendClass의 인스턴스 인스턴스를 사용하여 showMsg 객체 메소드를 호출하려면 어떻게 해야 합니까? 베이스클래스?
답은 여기에서call:
extendClass.prototype = new baseClass(); var instance = new extendClass(); var baseinstance = new baseClass(); baseinstance.showMsg.call(instance);//显示baseClass::showMsg
위는 JavaScript 학습 요약 프로토타입_javascript 스킬 내용입니다. 더 많은 관련 내용은 PHP 중국어를 참고해주세요. 홈페이지(www.php.cn)!
function baseClass(){ this.showMsg = function(){ alert("baseClass::showMsg"); } this.baseShowMsg = function() { alert("baseClass::baseShowMsg"); } } baseClass.showMsg = function(){ alert("baseClass::showMsg static"); } function extendClass(){ this.showMsg =function (){ alert("extendClass::showMsg"); } } extendClass.showMsg = function(){ alert("extendClass::showMsg static") } extendClass.prototype = new baseClass(); var instance = new extendClass(); instance.showMsg(); //显示extendClass::showMsg instance.baseShowMsg(); //显示baseClass::baseShowMsg instance.showMsg(); //显示extendClass::showMsg baseClass.showMsg.call(instance);//显示baseClass::showMsg static var baseinstance = new baseClass(); baseinstance.showMsg.call(instance);//显示baseClass::showMsg