JavaScript基本语法

  本节和CSS语法类似,理解这些语法以后,就可以按照Bootstrap的开发规范去开发自己的各种插件了。

||和&&运算符

  • ||表示,如果第一个元素可以转换为true,则返回第一个元素的值,否则查询第二个元素的值。如果多个||一起用,则按顺序优先级判断。
  • &&则相反,如果第一个元素可以转换为false,才返回第一个元素的值,否则返回第二个元素的值,多个&&一起用时,也是按顺序优先级判断。
  • a&&b&&c&&d:返回第一个可转换为false的元素值。
  • a||b||c||d:返回第一个可转换为true的元素值。

  上述运算符的转换规则如下:对象为true、非零数字为true、非空字符串为true、其他为false。

立即调用的函数表达式

  在JS里,function在定义的时候就可以通过在后面加一个小括号的形式立即进行调用。比如:

(function () { /* code */ } ());           // 推荐使用这个
(function () { /* code */ })();            // 这个也是可以用
(function () { /* code */ } (1));          // 传入参数1
(function () { /* code */ })(2);           // 传入参数2

  Bootstrap的所有JS插件都使用了这个模式。比如在alert.js文件里有以下代码:

+function ($) {
"use strict";
}(jQuery);

  这个文件的意思是声明一个function,然后立即执行,并且在执行的时候传入jQuery对象作为参数。这么做的好处是,此时function内部的$已经是局部变量了,不会再受外部作用域的影响了。

  function前面的+号和分号的功能是一样的,主要防止定义了不符合规定的代码。比如上面的这段代码若没有+号,则代码连接在一起执行就会出错,这样就消除了出错。参考:http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html

原型

  在Bootstrap的JS插件里,所有的插件都是利用了类似下面的代码:

Alert.prototype.close = function (e) {
    /*...*/
}

  上面的代码就是在Alert函数上定义了一个名为close的原型方法,参考:http://www.cnblogs.com/TomXu/archive/2012/01/05/2305453.htm

var Calculator = function () {};
Calculator.prototype.add = function (a, b) {
    return a + b;
}
var cal = new Calculator();
var sum = cal.add(1, 2);

 jQuery基本用法

  jQuery的on和off分别用于绑定和禁用事件。例如:

$('td').on("click",function (event){
    alert(1); 
})

$('td').off('click');

  但是对于Bootstrap框架,它对jQuery的on和off的使用稍有不同,例如:

$(document).on('click.bs.carousel.data-api','td',function (e){};
$(document).off('.carousel.data-api');

  上述的on在使用时,中间多了一个参数,而且选择器变成了document。它的好处是只在document上绑定一个单击事件,利用冒泡的机制,在单击的时候检查是否是td元素,如果是才处理。而前面我们把td作为选择器的时候,一个页面有多少td元素就会绑定多少个click事件,这样性能会大大降低。

  这种3个参数的模式称为享元模式,详情:http://www.cnblogs.com/TomXu/archive/2012/04/09/2379774.htm

事件命名空间

$('#abc').on("click.tomxu", function (event) {
    alert(1);
});

  另外,要注意的是,这里的事件(click)后面跟了一些字符串,我们简单称它们为带有命名空间的事件。一般别人触发click事件,都是这样做的$('#abc').trigger('click')。执行该代码时,所有绑定的click事件回调都会被执行。但是如果触发的时候,你不想影响其他click触发代码,这时候就可以只触发自己定义的click事件,以求不会对别人绑定的click回调产生影响,这时可以加上命名空间。

$.data()

  很多js插件里都使用了$(selector).data()方法,它的意思是收集指定元素上的所有以data-开头的自定义属性,并合并成一个对象字面变量。比如:

<div id="abc" data-role="aaa" data-toggle="toggle" data-xxx="tom"></div>

  如果要获取data-role里的aaa这个知,则需要调用如下代码:

$("'#abc").data("role");

  如果是不带参数的$("#abc").data()。则表示一次性将所有以data-开头的参数都收集起来,其结果和用如下方式声明一个value变量是一样的。

var value = {
    role: 'aaa',
    toggle: 'toggle',
    xxx: 'tom'
};

 

posted on 2016-02-18 11:31  凡一二三  阅读(321)  评论(0)    收藏  举报