<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[五月西瓜的专栏]]></title><description><![CDATA[做个不无聊的人]]></description><link>https://blog.youkuaiyun.com/JQuery_QQ</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; JQuery_QQ]]></copyright><item><title><![CDATA[现代web应用开发前后端协同工作的要点]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/84101425</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/84101425</guid><author>JQuery_QQ</author><pubDate>Thu, 15 Nov 2018 11:33:22 +0800</pubDate><description><![CDATA[
保证前后端完全分离，避免后端模版渲染。如果不能避免，可考虑增加node中间层实现，理论上保证前后端分离。
定义完善的接口文档，减少前后端接口对接的口头表述，这样能提高效率。
前后端并行开发，无需等到后端接口完成。前提是有完善的接口文档。
前端实现本地调试，避免频繁的线上调试。线上调试费时费力。
心平气和及时沟通。不管工具方法多么厉害，也需要当面沟通，相互配合。

相关链接
新浪微博

...]]></description><category></category></item><item><title><![CDATA[react context API配合高阶组件的实际应用]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/84075954</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/84075954</guid><author>JQuery_QQ</author><pubDate>Wed, 14 Nov 2018 23:22:02 +0800</pubDate><description><![CDATA[文章概览
本文包含新版本react contextAPI的简单介绍、基本用法和实际项目中的使用方法。
本文不会介绍context和高阶组件的概念，而是介绍二者如何配合使用。
简介
react在16.3版本引入了全新的context api，提供一种跨组件传递数据的方法，避免了在多组件层级间手动传递props。
基本用法
项目中很多组件需要共有的状态比如：主题、地区偏好。如何优雅的处理呢？当然了，借...]]></description><category></category></item><item><title><![CDATA[codeMirror支持sql输入提示]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/77187522</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/77187522</guid><author>JQuery_QQ</author><pubDate>Tue, 15 Aug 2017 12:48:02 +0800</pubDate><description><![CDATA[codeNirror 是一款非常不错的在线代码编辑插件。现在简单介绍对sql编辑的支持。
初始化
(function (){
            window.top._editor = CodeMirror.fromTextArea($("#codeTypeArea")[0], {
                mode: 'text/x-sql',
                inde]]></description><category></category></item><item><title><![CDATA[页面隐藏form下载文件]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/70214349</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/70214349</guid><author>JQuery_QQ</author><pubDate>Mon, 17 Apr 2017 18:03:15 +0800</pubDate><description><![CDATA[页面隐藏form下载文件0 == $(&quot;#ExcelForm&quot;).length &amp;&amp; $(document.body).append('&lt;form target=&quot;ExcelIframe&quot; id=&quot;ExcelForm&quot;&gt;'
           +'&lt;input type=&quot;hidden&quot; id=&quot;Excel_queryKey&quot; name=&quot;processIds&q]]></description><category></category></item><item><title><![CDATA[前后端完全分离后前端如何启动静态服务保证开发人员的访问？]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/53725760</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/53725760</guid><author>JQuery_QQ</author><pubDate>Sun, 18 Dec 2016 11:09:28 +0800</pubDate><description><![CDATA[如今前后端分离已经很普遍，后端提供模拟接口或者前端自己模拟数据就可以实现前后端同时开发，缩短项目时间。
其中有一点缺陷：将前后端接口联调的风险放到了最后，最后接口的改变可能对前端的代码影响较大。这就需要项目前期有完善的接口文档。

以往前端的同学做项目时服务的问题总是让自己很恼火，后端改了配置自己本地就尴尬了，又得请教后端同学，
就连配置web容器或者maven什么的。。。说起都是心累
]]></description><category></category></item><item><title><![CDATA[正则表达式入门]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51588732</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51588732</guid><author>JQuery_QQ</author><pubDate>Sun, 05 Jun 2016 11:38:56 +0800</pubDate><description><![CDATA[本文是根据大神的文章做的笔记，原文点这里

metacharacter(元字符)：
\b : 匹配一个位置（单词的开始或结束） 如：\bhi\b会精确的匹配到hi这个单词
.  : 匹配除换行符以为的任意字符
*  : 代表数量，指定前边的内容可以连续重复使用任意次以使整个表达式得到匹配  如：\bhi\b.*\bLucy\b意思是先一个单词hi然后是任意个字符（但是不能是换行），最后是]]></description><category></category></item><item><title><![CDATA[纯函数]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51585327</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51585327</guid><author>JQuery_QQ</author><pubDate>Sat, 04 Jun 2016 17:46:44 +0800</pubDate><description><![CDATA[原文：http://blog.youkuaiyun.com/hongweigg/article/details/44035283
英文：https://en.wikipedia.org/wiki/Pure_function

在计算机编程中，假如满足下面这两个句子的约束，一个函数可能被描述为一个纯函数：

给出同样的参数值，该函数总是求出同样的结果。该函数结果值不依赖任何隐藏信息或程序执行处理可能改]]></description><category></category></item><item><title><![CDATA[浏览器默认行为]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51568816</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51568816</guid><author>JQuery_QQ</author><pubDate>Thu, 02 Jun 2016 17:36:03 +0800</pubDate><description><![CDATA[浏览器拥有它自己的默认行为，如：
在form中按回车键就会提交表单；单击鼠标右键就会弹出context menu.
取消浏览器默认行为：
element.onclick = function(event) {
    event = event || window.event; 

    if (event.preventDefault) {  // W3C variant 
      ]]></description><category></category></item><item><title><![CDATA[javaScript事件捕获和冒泡]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51568779</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51568779</guid><author>JQuery_QQ</author><pubDate>Thu, 02 Jun 2016 17:33:08 +0800</pubDate><description><![CDATA[事件是先捕获，后冒泡。从最外层向内逐层捕获直到目标（target），再逐层向上冒泡直到标签。所有事件处理程序都会忽略捕获阶段，而在事件冒泡阶段触发事件。使用addEventListener绑定事件并且第三个参数为true，可以让事件在捕获阶段触发，这是唯一让事件在捕获阶段触发的方法。element.addEventListener("click",function(){},true)

事件中]]></description><category></category></item><item><title><![CDATA[工厂模式创建对象]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51516595</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51516595</guid><author>JQuery_QQ</author><pubDate>Fri, 27 May 2016 14:45:01 +0800</pubDate><description><![CDATA[工厂模式创建对象不会使用new操作符，而是返回一个对象字面量。
例子：
function Animal(name) {
	return {
		run: function() {
		  alert(name + " is running!");
		};
	}
}
var animal = Animal("fox");
animal.run();
继承：
继承也很简单，在获取到anima]]></description><category></category></item><item><title><![CDATA[javaScript属性和方法同在构造函数中（包含继承）]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51513841</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51513841</guid><author>JQuery_QQ</author><pubDate>Fri, 27 May 2016 11:23:38 +0800</pubDate><description><![CDATA[将所有属性和方法使用this声明，并放在构造函数中，不使用prototype.
例子：
function Animal(name) {
	this.name = name;
	this.run = function() {
		alert("running "+this.name)
	};
}

var animal = new Animal('Foxie');
animal.run();
]]></description><category></category></item><item><title><![CDATA[再看javaScript伪经典继承]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51509170</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51509170</guid><author>JQuery_QQ</author><pubDate>Thu, 26 May 2016 17:39:03 +0800</pubDate><description><![CDATA[为什么叫伪经典继承呢，因为javaScript中真的没有类。
        这里是两个伪经典继承的例子，第一种看上去更容易明明白，第二种只是在第一种的基础上对继承的细节进行了封装，使用起来更简单友好。多的不说，将代码自己写一遍自然就懂了。注释也有必要的说明。
// --------- the base object ------------
		//没有对继承细节进行封装
		functio]]></description><category></category></item><item><title><![CDATA[JavaScript继承本地对象]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51503205</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51503205</guid><author>JQuery_QQ</author><pubDate>Thu, 26 May 2016 00:12:27 +0800</pubDate><description><![CDATA[继承本地对象：
本地对象是可以被继承的，如Array.prototype保存着全部的Array实例的方法。
如果想在自定义对象（假设为myArray）中访问这些方法，办法就是myArray.__proto__ == Array.prototype.
来看例子：
// constructor
	function MyArray() {
	  this.stringify = function]]></description><category></category></item><item><title><![CDATA[javaScript装饰模式]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51498705</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51498705</guid><author>JQuery_QQ</author><pubDate>Wed, 25 May 2016 15:24:59 +0800</pubDate><description><![CDATA[装饰模式，让work函数本身不做任何修改的同，在其外部包裹一个额外的函数使其好像具备了新的额外的行为。
优点：1、装饰模式可以复用

             2、装饰模式可以灵活的组合
例子1
此处给work函数包裹外层函数后使其具有了一个日志功能，能记录并打印调用work时传递过的参数

function work(a,b){
			//console.log(a+b);]]></description><category></category></item><item><title><![CDATA[javaScript异常处理]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51491280</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51491280</guid><author>JQuery_QQ</author><pubDate>Tue, 24 May 2016 16:22:51 +0800</pubDate><description><![CDATA[try{

}catch(exception){

}finally{

}

catch和finally都是可选的，但是在使用try时，至少二选一。

catch住的异常对象存在两个基本属性：
name:错误类型
message:更多的错误描述

firefox、Chrome、Opera提供了一个stack属性，由它可以看到导致异常的嵌套调用。

关于return]]></description><category></category></item><item><title><![CDATA[javaScript中的static类型数据]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51485658</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51485658</guid><author>JQuery_QQ</author><pubDate>Mon, 23 May 2016 23:15:26 +0800</pubDate><description><![CDATA[一个function就一个对象，它可以提供一个创建static类型变量的办法。
javaScript中没有static关键字，但是我们能直接将此类型的变量放入对象中。
如：
        function f() {
	  f.count = ++f.count || 1 // f.count is undefined at first
	  alert("Call No " + f.co]]></description><category></category></item><item><title><![CDATA[javaScript valueOf和toString方法在不同场景被调用进行数据转换]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51457177</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51457177</guid><author>JQuery_QQ</author><pubDate>Thu, 19 May 2016 21:40:29 +0800</pubDate><description><![CDATA[看了篇英文的。。。。心累
说正事，Objects in JavaScript can be converted to primitives in three contexts:
javaScript对象在以下三种场景中会转换为原始数据类型。（primitives：英文是硬伤，这个单词意思表达的应该和Java中的基本数据类型一个意思，我会叫它元始数据类型、原语、基本数据。。。）



N]]></description><category></category></item><item><title><![CDATA[javaScript判断数据类型]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51451781</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51451781</guid><author>JQuery_QQ</author><pubDate>Thu, 19 May 2016 10:35:05 +0800</pubDate><description><![CDATA[javaScript中一个判断数据类型比较简单快捷的办法：
        var obj = Object.prototype.toString;
		
	console.log(obj.call(123));		//[object Number]
	console.log(obj.call("123"));		//[object String]
	console.log(obj.call(n]]></description><category></category></item><item><title><![CDATA[js响应事件的阶段，捕获阶段，冒泡阶段]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51448842</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51448842</guid><author>JQuery_QQ</author><pubDate>Wed, 18 May 2016 23:58:23 +0800</pubDate><description><![CDATA[当鼠标点击所看到的的按钮时，其实发生了一系列的事件传递，可以想象一下，button实际上是被body“包裹”起来的，body是被html“包裹”起来的，html是被document“包裹”起来的，document是被window“包裹”起来的。所以，在你的鼠标点下去的时候，最先获得这个点击的是最外面的window，然后经过一系列传递才会传到最后的目标button，当传到button的时候，这个事件]]></description><category></category></item><item><title><![CDATA[从url获取指定参数值，获取当前url上下文]]></title><link>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51436618</link><guid>https://blog.youkuaiyun.com/JQuery_QQ/article/details/51436618</guid><author>JQuery_QQ</author><pubDate>Tue, 17 May 2016 15:46:36 +0800</pubDate><description><![CDATA[1.从url获取指定参数值
function requestParam(paras){
	var url = location.href;  
	var paraString = url.substring(url.indexOf("?")+1,url.length).split("&");  
	var paraObj = {};  
	for (i=0; j=paraString[i]; i]]></description><category></category></item></channel></rss>