当前位置:  编程技术>WEB前端
本页文章导读:
    ▪JQuery验证工具类      var Validator = {// 邮箱isEmail : function(s) {var p = "^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$";return this.test(s, p);},// 手机号码isMobile : function(s) {return .........
    ▪JS 立即执行的函数表达式(function)写法       1. 前言 函数需要先定义,后使用。 这基本上所有编程语言的一条铁的定律。 一般状况下, 我们需要调用一个JavaScript 函数, 基本的状况都是先定义, 然后再调用。 看一个例子 <!--by oscar9.........
    ▪Javascript 原型prototype继承Object对象Function函数狂想      ----我以为的Function----1 function Function ( ) {2 this.prototype = new this() ; /*这就导致了所有的函数的原型都是对象;如:alert(typeof(Array.prototype));输出:object */3 this.prototype.constructor = this ; // 由.........

[1]JQuery验证工具类
    来源:    发布时间: 2013-11-06
var Validator = {
// 邮箱
isEmail : function(s) {
var p = "^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$";
return this.test(s, p);
},

// 手机号码
isMobile : function(s) {
return this.test(s, /^(180|189|133|134|153|181)\d{8}$/);
},

// 电话号码
isPhone : function(s) {
return this.test(s, /^[0-9]{3,4}\-[0-9]{7,8}$/);
},

// 邮编
isPostCode : function(s) {
return this.test(s, /^[1-9][0-9]{5}$/);
},

// 数字
isNumber : function(s, d) {
return !isNaN(s.nodeType == 1 ? s.value : s)
&& (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
},

// 判断是否为空
isEmpty : function(s) {
return !jQuery.isEmptyObject(s);
},

// 正则匹配
test : function(s, p) {
s = s.nodeType == 1 ? s.value : s;
return new RegExp(p).test(s);
}
};

  

本文链接


    
[2]JS 立即执行的函数表达式(function)写法
    来源: 互联网  发布时间: 2013-11-06

1. 前言

函数需要先定义,后使用。 这基本上所有编程语言的一条铁的定律。

一般状况下, 我们需要调用一个JavaScript 函数, 基本的状况都是先定义, 然后再调用。 看一个例子

<!--by oscar999 2013-1-16-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Say Hello</title>
</head>
<body>
<script>
	//define function
	function sayHello()
	{
		alert("hello");
	}
	//call function
	sayHello();
</script>
</body>
</html>

但是如果不需要显示调用函数, 让这个函数在定义的时候就执行的话, 该如何写才可以呢?

2. 思考的历程从以上的例子来看,聪明的你结合以上的使用状况可能会想:
===》既然调用的时候是在函数名后面加上一对 是否在function 定义的后面加上一对大括号是否就可以执行了呢? 像以下这样:
	function sayHello()
	{
		alert("hello");
	}();

不幸的是,以上的写法会报出js 的语法错误。
因为Javascript 的解析器在解析器解析全局的function或者function内部function关键字的时候, 默认会把大括号解析成function声明,而不是function表达式。
也就是说, 会把最后的一对大括号默认解析成一个缺少名字的function,并且抛出一个语法错误信息,因为function声明需要一个名字。

===》 你可能又会想, 如果我在大括号中传入参数是否就会解析成表达式了呢?

	function sayHello()
	{
		alert("hello");
	}(1);
的确, 错误是没有了。 但是以上的写法等同于以下写法的效果
	function sayHello()
	{
		alert("hello");
	};
	(1);
这两句完全没有关系, 函数还是不会执行


3. 正确的写法

对于JavaScript 来说,括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明 

所以, 只要将大括号将代码(包括函数部分和在后面加上一对大括号)全部括起来就可以了。

	(function sayHello()
	{
		alert("hello");
	}());

还有一种写法也可以, 就是将后面的大括号移出来, as

	(function sayHello()
	{
		alert("hello");
	})();

推荐是使用第一种方式。

但是目前很多比较好的js library 使用的都是第二种方式。

比如: web 图形绘制的: git , draw2d ,....


 4. 参考

1.  http://benalman.com/news/2010/11/immediately-invoked-function-expression/

作者:oscar999 发表于2013-1-16 10:30:08 原文链接
阅读:31 评论:0 查看评论

    
[3]Javascript 原型prototype继承Object对象Function函数狂想
    来源:    发布时间: 2013-11-06

----我以为的Function----

1 function Function ( ) {
2 this.prototype = new this() ; /*这就导致了所有的函数的原型都是对象;如:alert(typeof(Array.prototype));输出:object */
3 this.prototype.constructor = this ; // 由上一条推想可得
4 //... ...
5 //[native code]
6 //... ...
7 }

所有的函数:

预定义:
1 function Function () { [native code] }
2 function Object () { [native code] } // Math是Object构建的;
3 function Array () { [native code] }
4 function Date () { [native code] }
5 function String () { [native code] }
6 function Boolean () { [native code] }
7 function Number () { [native code] }
8 function RegExp () { [native code] }
自定义:

 

1 function Fn () { /*... ...*/ }

 

所谓的狂想

无论是预定义的(包括Function本身)还是自定义的函数都是由Function new出来的。我们知道,函数new出来的都是对象,那么Function是函数,它new出来的东西(函数)自然也会是对象,所以函数也是对象。

Function new出来的对象是函数,叫“函数对象”(简称“函数”);这跟

Array new出来的对象叫“数组对象”(简称“数组”);

Object new出来的对象是“对象对象”(简称“对象”)是一样的道理。

传说的癫疯

__proto__(血缘 或说DNA):

当用new操作符构造对象时,会在对象和构造函数之间创建__proto__链,该链应该是对外不可见的 (听闻Firefox、chrome可以让我们访问到,但并不建议这样做)。它的作用是:在对象检索属性无果时告诉对象接着应该去检索谁的prototype,无疑是将对象new出来的构造函数。另外,不要拿“constructor”那种次货跟它相提并论。

prototype:

所有的对象都有__proto__,但只有函数对象(默认)拥有prototype,非函数对象(默认)没有也没必要拥有prototype,这是prototype本身的职能所决定的:Javascript利用prototype实现扩展、共享和继承。

__proto__链、prototype链图:

后遗症:

利用Function.prototype或者Object.prototype可以将方法或属性分享给所有的对像(不仅仅是“对象对象”哦)。原理,看图!

注意:函数对象检索自身属性时是不会检索自身prototype对象的属性的(这有点像废话),无人问津,它的prototype只有由它构建的对象在检索自身属性无果时才会去访问:

1 Array.prototype.selfCheck = "Are you sure?";
2 alert(Array.selfCheck);// 输出:undefined; 自定义的函数亦是如此

但Function和Object会有所不同:

Function.prototype.selfCheck = "Yes!"
alert(Function.selfCheck) ; // 输出:"Yes!",原因如图:Function __proto__ Function
Object.prototype.selfCheck = "Yes!"
alert(Object.selfCheck);// 输出:"Yes!",原因如图:Object __proto__ Function,Function.prototype是Object

更有意思的:

1 Function.prototype.sayHello="Hi,F";
2 Object.prototype.sayHello="Hi,O";
3 alert(Object.sayHello);//输出:Hi.F

追本溯源:(再说函数也是对象!)

把“函数对象”比作受惊L,那么Function就像是LZ,Function内的“this.prototype = new this()”就像是LZ内的一根JZ啊,受惊L同时拥有LZ和JZ的DNA,“函数对象”就这样同时具备了函数和对象的特性啊!!!

 水平有限,如有不是,忘不吝赐教。

本文链接


    
最新技术文章:
▪css white-space:nowrap属性用法(可以强制文字不...
▪IE里button设置border:none属性无效解决方法
▪border:none与border:0使用区别
▪html清除浮动的6种方法示例
▪三个不常见的 HTML5 实用新特性简介
▪css代码优化的12个技巧
▪低版本IE正常运行HTML5+CSS3网站的3种解决方案
▪CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chr...
▪ie6,ie7,ie8完美支持position:fixed的终极解决方案
▪小技巧处理div内容溢出
▪html小技巧之td,div标签里内容不换行
▪纯CSS实现鼠标放上去改变文字内容
▪li中插入img图片间有空隙的解决方案
▪CSS3中Transition属性详解以及示例分享
▪父div高度不能自适应子div高度的解决方案
▪告别AJAX实现无刷新提交表单
▪从零学CSS系列之文本属性
▪HTML 标签
▪CSS3+Js实现响应式导航条
▪CSS3实例分享之多重背景的实现(Multiple background...
▪用css截取字符的几种方法详解(css排版隐藏溢...
▪页面遮罩层,并且阻止页面body滚动。bootstrap...
▪CSS可以做的几个令你叹为观止的实例分享
▪详细分析css float 属性以及position:absolute 的区...
编程语言 iis7站长之家
▪CSS小例子(只显示下划线的文本框,像文字一...
▪可以给img元素设置背景图
▪不通过JavaScript实现的自动滚动视差效果
▪div+CSS 兼容小摘
▪CSS的inherit与auto使用分析
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3