Home  >  Article  >  Web Front-end  >  Prototype mechanism in JS: implementing inheritance and extension of constructors and their instances

Prototype mechanism in JS: implementing inheritance and extension of constructors and their instances

php是最好的语言
php是最好的语言Original
2018-08-06 17:44:371192browse

Prototype in JS

Prototype mechanism(prototype) occupies an important position in JavaScript and is a very important one Mechanism, through [[prototype]], we can easily realize the inheritance and extension of the constructor and its instances.

The concept of prototype is roughly shown in the figure below. For details, please refer to MDN. This article mainly talks about the application of prototype in practice.
Prototype mechanism in JS: implementing inheritance and extension of constructors and their instances

Refer to the prototype mechanism in jQuery and zepto. The application of prototype is roughly divided into the following parts:

  • Define the constructor

  • Define the generated instance interface

  • Define the initialization function

  • Provide extended interface (plug-in mechanism)

  • Provide external interface

  • Bind prototype

Create a library file of your own (Sojourn.js )

(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 || &#39;&#39;;
  }  // 定义生成实例接口
  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(&#39;no change&#39;);
      }      // 返回dom对象以实现链式调用
      return this;
    }
  }  // 绑定原型
  Sojourn.S.prototype = S.prototype = $.fn;  // 绑定到全局对象
  window.$ = $;
})(window)

Using Sojourn.js in HTML

<!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 = $(&#39;#p1&#39;);      // 链式调用
      p1.html().html(&#39;use Sojourn.js&#39;);      // 扩展插件
      $.fn.getNodeName = function () {
        alert(this[0].nodeName);
      }

      p1.getNodeName();
    }, 1000);  </script></body></html>

Related articles:

Four Steps to JS Prototypal Inheritance

js class inheritance and prototype inheritance detailed explanation_javascript skills

Related videos:

Video-JavaScript Direction-PHP Chinese Network Tutorial

The above is the detailed content of Prototype mechanism in JS: implementing inheritance and extension of constructors and their instances. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn