1. 赋值
var o = anything || ' anythig is undefined'; // o 首先会取值 anything, 但如果anything 未定义, 则会取值 'anything is undefined'.
var o = anything && 'anything is not undefined'; //o 首先会取值 'anything is not undefined', 但如果 anything 未定义或空或null,则会取值 anything.
2. 对象字面量
var martin = {};
// martin 不尽是个对象字面量,而且可以作为管理全局变量的命名空间,
// 如我们经常这样使用全局变量 var name = 'hello'; var age = 18; 不好管理,现在可以用martin 装起来 martin = {name:'hello',age:18}
3. 作用域
function myfunction(){
this.myname='belong to caller'; // 属性只属于this的绑定者
alert(myname); //undefined
var myname='belong to function'; // 变量在js中,其作用域是function级别的,没有块级
alert(myname); // belong to function
}
myfunction(); //这样 window是caller, window 拥有 myname
var o= {};
o.toMe=myfunction;
o.toMe(); //这样 o是 caller, o 拥有 myname
4. 变量
内部函数可以访问外部函数的参数和变量,但不能访问其中的 this(如果是以函数形式调用,则可以访问) 和 arguments(有length属性,
可通过arguments[...]获取对象,但它不是数组对象,没有数组其它方法.)
function externalFunc (a,b){
this.e = 5;
var d = 4;
//此时 arguments.length = 3
function internalFunc(){
alert(a); // 1
alert(b); // 2
alert(d); // 4
alert(this.e); // 若externalFunc以 externalFunc(1,2,3) 调用,则为 5;
// 若以 var o ={}; o.callExt=externalFunc; o.callExt(1,2,3) 调用,则为 undefined,
// 如果需要访问,则可以在其外部中定义一个变量来装载this,如我们常见的 var self=this;或var that=this; ,这样 alert(that.e); // 5
alert(arguments[2]); // undefined , 此时只是自身的 arguments, 而非外部函数的 arguments
}
internalFunc();
alert(arguments[2]); // 3
}
externalFunc(1,2,3);
5. 封装、继承、多态
//封装 function Person(name){ this.name= name; }; Person.prototype.getInfo = function(){ return "My name is " + this.name; }; function Student(name){ this.name=name; } //继承 Student.prototype = new Person(); //重写 Student.prototype.getInfo = function(){ return "My name is " + this.name + " and I am a student."; }; function Teacher(name){ this.name=name; } //继承 Teacher.prototype = new Person(); //重写 Teacher.prototype.getInfo = function(){ return "My name is " + this.name + " and I have 40 students."; }; //多态 var persons=[new Student("apple"), new Teacher("mao")]; for (var i=0;i<persons.length;i++){ alert(persons[i].getInfo()); }
6. 闭包:它本身是一个函数,而这个函数又引用了其上下文的环境变量
7. 扩展 jquery
红色字体部分可取值: $.fn 是针对对象的方法扩展;$ 是针对jQuery的扩展方法
格式:
$.extend(boolean,dest,src1,src2...)// true(为默认值): src2 对 src1 深度复制;false:则 src2 对 src1 不深度复制;
或
$.extend(dest,src1,src2...) //dest 可以取值:{}, $或jQuery, $.fn
$.extend($.fn,{ extendName:function(){ var self=this, $someProperty=$('something'); init=function(){ //todo something }; someMethod:function(){ //todo something }; init(); } });
这样使用扩展方法:
$('div').extendName();
如果是红色部分是$不是$.fn,则这样使用
$.extendName();
应用例子
获取cookie: function getCookie(sName) { var sCookies = document.cookie ; if ("string" == typeof(sName)) { var sRE = "(?:; )?"+sName+"=([^;]*);?" ; var reRE = new RegExp(sRE) ; if (reRE.test(sCookies)) { return decodeURIComponent(RegExp["$1"]) ; } else { return null ; } } else { return sCookies ; } } 重定向 function redirect(){ var userAgent = navigator.userAgent; if(userAgent){ userAgent = userAgent.toUpperCase(); var mobilePhoneList = ["PAD","IOS","IPHONE","ANDROID","WINDOWS PHONE"]; for(var i=0,len=mobilePhoneList.length;i<len;i++){ if(userAgent.indexOf(mobilePhoneList[i])>-1){ window.location.href = "url"; } } } }
。。。。。