this
this是在函数执行的时候去获取对应的值,而不是函数定义时.函数里面的this,谁调用函数this就指向谁。
this容易出问题的地方:
定显示器调用的this就指向window,解决办法就是再套一层。
setInterval(function(){
_this.fun();
})
<input type='buttom' onClick="fun()" /> <script>function fun(){ alert(this); }</script> //此时this指向的window
oDiv.onClick=fun; //this指向oDiv,函数后不带( )
oDiv.onClick=function(){ this.value=""; fun(); } //前面的this指向oDiv ,fun()里 的this指向window
背景不能作为判断条件,颜色不能作为判断条件
object
object只要不为空就可以添加自定义的属性和自定义方法。
var obj=document;
obj.onOff=true; //自定义属性
Number()
Number( )可以转字符串、bool值,NULL,一个值的数组可以转换,但是多个值的数组就转不了,不能转函数返回NAN
Number( )、parseInt()、parseFloat()强制类型转换
隐式类型转换:
+ '200'+3 //变成字符串
- * / % '200'-3 //变成数字
++ -- 变成数字
>< 数字的比较、字符串的比较
! 取反
== === 二等判断值 ,三等判断值和类型
NaN :false ;NaN===NaN //false; not a number 不是数字但是数字类型,NaN提示出现了非法运算。
isNaN(): 方法;根据Number( )转换后再进行判断值是不是数字,是数字返回false,不是数字返回true,NaN时返回true //input里面输入的数据都是字符串不能用typeof来判断,只能用isNaN判断
break和continue
break跳出,结束整个循环 //for(var i=0;i<6;i++){if(i==3){break;}alert(i)} 0 1 2
continue跳过,结束单次循环//for(var i=0;i<6;i++){if(i==3){continue;}alert(i)} 0 1 2 4 5
true和false
false:NaN、空字符串、null、未定义
true:非空字符串、函数、{}、[]
定时器
clearInterval可以清除null,可以清除未定义
var timer=setInterval(fun,1000); //执行很多次
clearInterval(timer);
var timer setTimeout(fun,1000); //只执行一次
clearTimeout(timer)
(function(arg){...})(param)
( function(arg) {...} )(param)相当于定义了一个参数为arg的匿名函数,并且将param作为参数来调用这个匿名函数
(function($){...}) (jQuery)之所以只在形参使用$,是为了不与其他库冲突,所以实参用jQuery,用来定义一些需要预先定义好的函数
var fn = function($){....}; //相当于(function($){...}) (jQuery)
fn(jQuery);
fn(jQuery);
总结:
jQuery(function(){ });用于存放操作DOM对象的代码,执行其中代码时DOM对象已存在。不可用于存放开发插件的代码,因 为jQuery对象没有得到传递,外部通过jQuery.method也调用不了其中的方法(函数)。
(function(){ })(jQuery);用于存放开发插件的代码,执行其中代码时DOM不一定存在,所以直接自动执行DOM操作的代码 请小心使用。
(function(){ })(jQuery);用于存放开发插件的代码,执行其中代码时DOM不一定存在,所以直接自动执行DOM操作的代码 请小心使用。
clientX/clientY: 当一个事件发生的时候,鼠标到页面可视区的距离。
scrollX/ScrollY: 滚动条的高度和宽度
Event
onmousemove:当鼠标在一个元素上面移动时触发,触发的频率不是像素,还是间隔时间,在一个指定的时间内(很短),如果鼠标的位置和一一次的位置发生了变化,那么就会触发一次。
时间冒泡:当一个元素接受到一个事件时,会把这个事件传递给它的父级,一至到 window为止。
event.cancelBubble=true; //阻止事件冒泡
function(ev){ev.cancelBubble=true;}
事件捕获:IE浏览器没有事件捕获、
给一个对象的同一个事件绑定多个不同的函数
ie:obj.attacthEvent("事件名称",事件函数) //1 无捕获,2 this指向window,3 事件执行顺序是倒序
标准:obj.addEventListener("事件名称",事件函数,是否捕获) // 1 有捕获 :false:冒泡 ture:捕获,默认是false,2 this指向该事件的对象,3 事件执行顺序是正序,4事件名称没有on
call :call第一个参数可以改变函数执行过程中的内部this的指向。//fn.call(obj);指向obj
面向对象
工厂模式
问题:1.没有new,2.每个对象都有自己的一套函数,浪费资源。
fuction fun(name)
{
obj =new object(); //原料
obj.name=name; //加工
obj.fn= function () { alert(this.name); }
return obj; //出厂
}
var f1=fun("Jone");
f1.fn();
构造函数
构造函数就是类,构造函数首字母大写
function CreatePerson(name)
{this.name=name; //属性}
//方法
CreatePerson.prototype.showName=function(){alert("this.name);}
json构造函数
var per={name:"jone",sec:" 女",shwoName:function(){alert(this.name;}}
per.common{ getByGroup:function(){}}
per.showName():
继承
function Person(name,sex)
{this.name=name;
this.sex=sex;
}
function Worker(name,sex, job)
{
//this -new出来的Worker对象
//构造函数伪装
Person.call( this ,name ,sex ); //把父的属性继承过来
}
Worker.prototype=Person.prototype; //原型链,这个操作Worker会影响到Person,前面修改的后面也会跟着修改
for(var i in Person.prototype){Worker.prototype[i]=Person.prototype[i];} //换成这种办法可解决
instanceof
判断某个对象是否是某个类的实例
本地对象 (非静态对象)
Object, Function, Array, String, Boolean,Number, Date, RegExp ,Error
内置对象(静态对象)
Math,Globle
宿主对象
BOM 、DOM
ajax和pjax
ajax不能改变URL,不利搜索引擎爬取,pjax在改变页面的同时可以改变URL。
!!eles //加两个!!,如果eles是undefined将转换成false,可以用来判断函数参数是否传入了