博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript的函数式编程方法
阅读量:6258 次
发布时间:2019-06-22

本文共 2288 字,大约阅读时间需要 7 分钟。

jQuery是一个Internal DSL的典型的例子,ds.js也是使用函数式编程的风格。

链式方法调用 eg:$('.mydiv').addClass('flash').draggable().css('color', 'blue')

一个简单的列子:

Func = (function() {    this.add = function(){        console.log('1');        return this;    };    this.result = function(){        console.log('2');        return this;    };    return this;});var func = new Func();func.add().result();

创建一个$函数:

html:
<div id="head"></div>
<div id="contents"></div>
调用方法:
$('head','contents').show().addEvent('click', function(){alert(1)})
封装方法如下:

(function(){  function _$(els){    this.elements = [];//把那些元素作为数组保存在一个实例属性中,    for(var i= 0, len=els.length; i

模拟jquery底层链式编程:

// 块级作用域//特点1 程序启动的时候 里面的代码直接执行了//特点2 内部的成员变量 外部无法去访问 (除了不加var修饰的变量) (function(window , undefined){  // $ 最常用的对象 返回给外界 大型程序开发 一般使用'_'作为私用的对象(规范)  function _$(arguments){    //实现代码...这里仅实现ID选择器    // 正则表达式匹配id选择器    var idselector = /#\w+/ ;    this.dom ;   // 此属性 接受所得到的元素    // 如果匹配成功 则接受dom元素  arguments[0] = '#inp'    if(idselector.test(arguments[0])){      this.dom = document.getElementById(arguments[0].substring(1));    } else {      throw new Error(' arguments is error !');    }  };   // 在Function类上扩展一个可以实现链式编程的方法  Function.prototype.method = function(methodName , fn){    this.prototype[methodName] = fn ;    return this ; //链式编程的关键  }   // 在_$的原型对象上 加一些公共的方法  _$.prototype = {    constructor : _$ ,    addEvent:function(type,fn){      // 给你的得到的元素 注册事件      if(window.addEventListener){// FF         this.dom.addEventListener(type , fn);      } else if (window.attachEvent){// IE        this.dom.attachEvent('on'+type , fn);      }      return this ;     },    setStyle:function(prop , val){      this.dom.style[prop] = val ;      return this ;    }  };     // window 上先注册一个全局变量 与外界产生关系  window.$ = _$ ;  // 写一个准备的方法  _$.onReady = function(fn){     // 1 实例化出来_$对象 真正的注册到window上    window.$ = function(){      return new _$(arguments);    };    // 2 执行传入进来的代码    fn();    // 3 实现链式编程    _$.method('addEvent',function(){      // nothing to do    }).method('setStyle',function(){      // nothing to do    });   }; })(window); // 程序的入口 window传入作用域中  $.onReady(function(){  var inp = $('#inp');  //alert(inp.dom.nodeName);  //alert($('#inp'));  inp.addEvent('click',function(){    alert('我被点击了!');  }).setStyle('backgroundColor' , 'red');});

转载地址:http://aoxsa.baihongyu.com/

你可能感兴趣的文章
IIS7.5 反向代理
查看>>
JavaScript使用技巧精萃
查看>>
arnold shader custom aov
查看>>
Core Animation之基础介绍
查看>>
JavaScript中的==和===
查看>>
mysql给root开启远程访问权限,修改root密码
查看>>
一张图看懂如何选择正确的图表
查看>>
js打开新标签页
查看>>
使用断点与跟踪点
查看>>
windows 上 gvim 的编码设置
查看>>
ubuntu
查看>>
Android Mms专题之:对话与联系人的关联
查看>>
struts2中的json
查看>>
reset,end,prev,current,next函数
查看>>
Chain of Responsibility_职责链模式_PHP语言描述
查看>>
elasticsearch安装
查看>>
处女作输入sql通过python脚本导出 数据
查看>>
医学教育网批量资源下载程序之——探路
查看>>
js调用cs中函数的方法 和 在cs中调用js函数的方法
查看>>
09-Swift中的元组
查看>>