zoukankan      html  css  js  c++  java
  • JS组件开发

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>JS组件开发2</title>
    </head>
    <body>
    <input type="text" id="J_input"/>
    </body>
    <script src="jQuery/1.9.1/jquery.min.js"></script>
    <script>
        var TextCount = (function(){
            //私有方法,外面将访问不到
            var _bind = function(that){
                that.input.on('keyup',function(){
                    that.render();
                });
            };
            var _getNum =function(that){
                return that.input.val().length;
            };
    
            var TextCountFun = function(config){
    
            };
            TextCountFun.prototype.init = function(config){
                this.input = $(config.id);
                _bind(this);
                return this;
            };
    
            TextCountFun.prototype.render = function(){
                var num = _getNum(this);
                if ($('#J_input_count').length == 0) {
                    this.input.after('<span id="J_input_count"></span>');
                };
                $('#J_input_count').html(num+'个字');
            };
            //返回构造函数
            return TextCountFun;
        })();
    
        $(function(){
            new TextCount().init({id:'#J_input'}).render();
        });
    </script>

    看了一篇关于写JS组件开发的博客,居然看不懂,虽然我前几天觉得自己把原型那块弄的非常懂,但是看到上面实际应用的代码时,还是一脸懵逼,不知道如何下面的调用这个组件的方式为何是这样,我就写了下面的一个小例子:而且呢,

    你一定要搞清楚this的指向问题,在这里this都是指向构造函数TextCountFun.

     $(function(){
            new TextCount().init({id:'#J_input'}).render();
        });

    为啥这样调用:首先,匿名函数自执行--返回了构造函数了TextCountFun--1,所以TextCount 等同于构造函数TextCountFun,

    2,new TextCount()相当于实例化了TextCountFun,

    3,new TextCount().init({id:'#J_input'}),就是调用了TextCountFun原型里的方法,init并且传了参数, init方法又返回了this---又因为this指向了TextCountFun,所以实现了链式调用render.

    附上我自己动手分析的一个小例子:当你弄不明白的时候,动手写个小小的demo一步步分析,你就会懂了....

    <script>
        var a = (function(){
            var _eat = function(that){
                alert(this) ;//这里的this 指向window
                alert(that.food);  //所以把指向构造函数的this传值给_eat,让_eat可以调用Person里的属性。
            };
            function Person(info){
                this.name = info.name;
                this.age = info.age;
                this.food  = info.food;
            }
            //共有方法
            Person.prototype.say =  function(info){
                _eat(this); //这里的this指向构造函数Person
                return  this.name+this.age;
            };
            return Person;
        })();
    
    //构造函数
      var b = new a({name:'zhu',age:'20',food:'apple'});
       alert(b.say());
    
    </script>

    并且附上以上组件来源的博客地址:javascript组件开发

    顺便奉上几篇关于js插件编写规则的文章

    如何定义一个高逼格的原生JS插件

    从jq插件到js组件封装

  • 相关阅读:
    不需重新编译php,安装postgresql扩展(pgsql和pdo_pgsql)
    css如何实现水平垂直居中
    win系统DOS批处理命令:每日根据定时计划,弹出相应的提醒
    使用navicat连接mysql连接错误:Lost connection to Mysql server at 'waiting for initial communication packet'
    mysql域名解析引起的远程访问过慢?
    Jquery封装: 地区选择联动插件
    Jquery封装: WebSocket插件
    Jquery封装:下拉框插件
    如何在微信小程序中使用阿里字体图标
    轻量级进度条 – Nprogress.js
  • 原文地址:https://www.cnblogs.com/qianxunpu/p/7458694.html
Copyright © 2011-2022 走看看