1.JS面向对象
1.JS一切皆对象
(1) 在JS中基本数据类型、引用数据类型、函数等,都可以看成是对象。
var num1 = 19.18999;
var num2 = new Number(3.1415926);
var func = new Function("a","b","return a*b");
console.log(func(10,20)); //200
2. true和false的判断
(1) 0,"",undefined,NaN,null,false都可以表示false,除此之外都为true
var b2 = new Boolean(false);
if(b2){
console.log('进来了吗');//会打印
}
if(123){
console.log('真的是true吗1');//会打印
}
if("哈哈哈"){
console.log('真的是true吗2');//会打印
}
3. 创建对象
1.创建对象
var obj1 = new Object();
var obj2 = {"name":"小明","age":20};
function Person(){}
var p = new Person();
2.添加属性
obj1.name="小王";
obj1.age=18;
obj1["sex"]="男"
obj1.say= function(){
alert("说点啥呢")
}
3.使用属性
obj1.say()
console.log(obj1.name)
console.log(obj1.age)
4.删除属性
删除对象属性使用delete 对象名.属性名;
js移除标签属性
document.getElementById(“标签ID”).removeAttribute(“标签属性名”)
jQuery移除标签属性
$(“标签名”).removeAttr(“标签属性名”)
5.遍历对象
for(var key in obj1){
if(typeof obj1[key]=="function"){
obj1[key]()
}else{
console.log(obj1[key])
}
}
4. JSON
var j = '{"name":"小明","age":18}'
console.log(typeof j)//string
var json1 = eval("("+j+")")
console.log(json1)
//必须是标准的JSON格式
var json2 = JSON.parse(j)
console.log(json2)
//底层也是JSON.parse()
var json3 = $.parseJSON(j)
console.log(json3)
5. JS的其他内容
- JavaScript中没有为我们提供像Java中定义类的关键字class。我们定义类只需要定义这个类的"构造函数"即可,构造函数与普通函数没区别,函数名首字母最好大写。
- hasOwnProperty() 判断对象里面是否有属性。
拷贝属性:
for(var key in obj1){
//判断obj2中是否存储这个属性.
if(!obj2.hasOwnProperty(key)){
obj2[p] = obj1[p];
}
}
- 函数中的name是一个只读属性,window里面name 默认值为空字符串,我们可以给它进行赋值
- this表示当前对象,apply()和call()可以改变this的指向
6. prototype原型
一般是先写构造方法,当我们完成业务代码到一定阶段的时候,突然发现需要扩展一个功能,这个时候,不建议去修改原有的代码,使用原型共享。
有些时候,需要扩展一些系统的类的功能,我们改不了,使用原型共享。
使用对象的属性时,先在自身上找,没有找到再去原型上找
7. 回调函数
回调函数就是一个通过对象引用调用的函数;
如果你把函数的引用作为参数传递给另一个函数,当这个引用被用来调用其所指向的函数时,我们就说这是回调函数。
setTimeout() 、ajax回调
8. 匿名函数
三种写法:
1.(function(){})
(function(a,b){return a*b})(10,20);
2.~function(){}
3.+function(){}
用途:
1.如果只需要执行一次,可以使用匿名函数
2.作为参数传递来使用
3.解决作用域污染问题
9. 闭包
函数内部使用函数外部的变量。
闭包加匿名函数实现属性的只读
(function(){
var a = 1;
window.hello=function(){
return a++;
}
})();
console.log(hello());
console.log(hello());
//
var a = 10;
console.log(hello());
console.log(hello());
console.log(hello());
10. jQuery事件委托
事件绑定必须是在绑定的时候存在的。对于后面通过代码添加的元素是不起作用的,这时就需要使用事件委托来处理。
11. jQuery事件命名空间
$("#btn1").on("click.bt1",function(){})
$("#btn1").on("click.bt2",function(){})
$("#btn1").off("click.bt1");//取消.bt1事件
12. jQuery继承
拓展功能:要想给jQuery对象进行功能扩展,就应该在原型prototype上扩展,jQuery底层就是这样实现的
jQuery.fn = jQuery.prototype=$.fn
$.fn.setHtml = function(content){
$(this).html(content);
};