프로토타입 메커니즘(prototype)
在JavaScript中占有重要的地位,是很重要的一种机制,通过[[prototype]]
을 사용하면 생성자와 해당 인스턴스의 상속과 확장을 쉽게 구현할 수 있습니다.
프로토타입의 개념은 아래 그림과 같습니다. 자세한 내용은 MDN을 참조하세요. 주로 프로토타입의 실제 적용에 대해 설명합니다.
jQuery 및 zepto의 프로토타입 메커니즘을 참조하십시오. 프로토타입의 적용은 대략 다음과 같은 부분으로 나뉩니다.
생성자 정의
생성된 인스턴스 인터페이스 정의
초기화 함수 정의
확장 인터페이스 제공(플러그인 메커니즘)
외부 인터페이스 제공
프로토타입 바인딩
(function (window) { // 定义属于自己的对象 var Sojourn = {} // 定义构造函数 function S(dom, selector) { var i, len = dom ? dom.length : 0; for (i = 0; i < len; i++) { this[i] = dom[i]; } this.length = len; this.selector = selector || ''; } // 定义生成实例接口 Sojourn.S = function (dom, selector) { return new S(dom, selector); } // 定义初始化函数 Sojourn.init = function (selector) { var slice = Array.prototype.slice; var dom = slice.call(document.querySelectorAll(selector)); return Sojourn.S(dom, selector); } // 提供对外接口 var $ = Sojourn.init; // 提供扩展接口 $.fn = { constructor: Sojourn.S, // 添加方法 // 定义一个修改元素html内容的方法 html: function (content) { console.log(this); if (content) { this[0].innerHTML = content; } else { alert('no change'); } // 返回dom对象以实现链式调用 return this; } } // 绑定原型 Sojourn.S.prototype = S.prototype = $.fn; // 绑定到全局对象 window.$ = $; })(window)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>prototype-test</title></head><body> <p id="p1">prototype test</p> <script src="./sojourn.js"></script> <script> // 一秒钟后使用构造的方法改变dom元素 setTimeout(function () { var p1 = $('#p1'); // 链式调用 p1.html().html('use Sojourn.js'); // 扩展插件 $.fn.getNodeName = function () { alert(this[0].nodeName); } p1.getNodeName(); }, 1000); </script></body></html>
관련 기사:
JS 클래스 상속 및 프로토타입 상속 자세한 설명_Javascript 기술
관련 동영상:
Video-JavaScript 방향-PHP 중국어 웹사이트 튜토리얼
위 내용은 JS의 프로토타입 메커니즘: 생성자와 해당 인스턴스의 상속 및 확장 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!