JS加强

jQuery加强

1.JS概述:

JS是一个基于对象和事件驱动的编程语言。

1.1 JS一切皆对象

java对象:某一个事物的具体的实例

java基本类型:byte short int char long float double boolean

JS中的false:0 , “”,undefined , NaN , null , false;

2.语法

2.1 遍历/迭代对象成员

代码模板

for(var p in obj){ 
	console.debug(p);
    if(typeof jsonObj[p] == 'function'){//判断是否是函数方法
        jsonObj[p]();//函数的调用需要在最后加()
    }else{
        console.debug(jsonObj[p]);
    }
}

例子:

<script type="text/javascript">
	var jsonStr = [{"name":"王麻子","age" : 16,"sex" : "男"},{"name" : "张麻子","age" : 26,"sex" : "女"}];
	for (var key in jsonStr) {
		if(typeof jsonStr[key] == "function"){
			jsonStr[key]();
		}else{
			console.debug(jsonStr[key]);
		}
	}
		</script>

2.1 json字符串和json对象的转换

1、eval表达式

	var jsonStr = '[{"name":"云小贱 ","age":18,"sex":"male"},{"name":"向乌龟","age":21,"sex":"male"}]';
	console.debug(jsonStr);
	var jsonObj = eval("("+jsonStr+")");

2、window.JSON.parse(jsonStr)

var jsonObj2 = window.JSON.parse(jsonStr);

3、$.parseJSON(jsonStr)

var $jsonObj3 = $.parseJSON(jsonStr);

2.2 JS中创建对象

创建对象的两种方式

var obj = new Obj();
var json = {'key':'value','key':'value'};

对象添加属性或方法

obj.age=20;
obj.name="云小贱";
obj["age"] = 18;
obj["name"]="张三";
var json =  {"name":"云小贱","age":20}
//添加方法
obj.say = function(){
    console.debug("恭喜云珲瑜结扎成功。")
}

删除属性(无法删除方法)

delete obj.name;
delete obj["age"]

2.3 JS类

类名首字母大写

function ClassName(par1,par2...){
    this.par1 = par1;
    this.par2 = par2;
    this.func = function(){        
    }
}

新建对象

var obj = new Class(par1,par2...)

实例

<script type="text/javascript">
	function Hero(name,career){
		this.name = name;
		this.career = career;
		this.getSkill=function(){
			console.log("IronManComing")
		};
	}
	var spiderman = new Hero("Helandi","spiderman");
	console.log(spiderman.name)
	spiderman.getSkill();

2.4 对象之间的属性赋予

2.4.1 赋予方式(不建议)

obj.[key] = obj2.[key]

实例(注意对象创建时,属性之间的连接符为 , )

<script type="text/javascript">
		var wifi = {
			name:"wifi",
			age:20,
			sex:"male",
			skill:"music"
		};
			
		var blue2={
			name:"blue2",
			age:18,
		};
			
		blue2.sex=wifi.sex;
		console.log(blue2.sex);
</script>

2.4.2 推荐的赋予方式

for (var key in wifi) {
	if(!blue2.hasOwnProperty(key)){
		blue2[key] = wifi[key];
	}
}
for (var key in blue2) {
	if(typeof blue2[key] == 'function'){
		console.log(blue2[key]());
	}else{
		console.log(blue2[key]);
	}
}

执行结果

blue2 
18 
male 
music

2.5 函数也可作为对象进行赋值

函数对象

<script type="text/javascript">
	var add = new Function("a","b","return a+b");
	console.log(add(2,3));
</script>

注意return,如果没有return会报错。

实例:

			add.age=18;
			add.name = "小明";
			add.sname="小牛";
			console.log(add.age);
			console.log("!!!!" + add.name);
			console.log("!!!!" + add.sname);

执行结果:name属于只读属性,无法被更改(可能是固有字段)。

5 
18 
!!!!anonymous 
!!!!小牛

2.6 JS中的this:谁调用指向谁。

实例:

var obj1 = {
	"name": "云小贱"
};			
function sayHello() {
	return this.name; 
};			
obj1.say = sayHello;
console.debug(obj1.say()); 
console.debug(sayHello()); 

执行结果:

云小贱

obj1.say()会将obj1的name作为返回值返回,而第二个sayHello调用的是window的属性,故为空值。

2.7 JS中修改this的指代对象(Unknown)

看不懂。直接贴图。

[外链图片转存失败(img-MUfuoeYl-1563460112337)(file:///C:/Users/MI/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)]

2.8 Prototype原型

Javascript中的每一个对象都有一个prototype属性(proto),这个属性是一个引用,这个引用指向对象的原型。

同一个类的各个实例的原型(proto)是相等的

同一个类的各个实例的原型(proto)共享

function User(name, age) {
		this.name = name;
		this.age = age;
	}
	
	var obj1 = new User("云小贱",17);
	var obj2 = new User("向乌龟",18);
console.debug(obj1.__proto__==obj2.__proto__);//true	

3.回调函数

回调函数是通过函数/对象引用调用的函数;

如同system.out.println(str.toString.trim());

4.匿名函数

为了不污染作用域(不产生只使用一次的全局变量)传递参数的一种方法,有三种写法。

4.1 (function({});

4.2 ~function(){};

4.3 +function(){};

实例

//正常函数
	function sayName(name) {
		console.debug("我是:" + name);
	}
	
	//匿名函数
	function(name){
		console.debug("我是:" + name);
	}

一般使用写法:

(function(name) {
		console.debug("我是:" + name);
	})();//必须要加()才算调用,此时未传参。

<script type="text/javascript">
	(function(a, b) {
		window.result = a*b; //全局变量接收。
	})(10, 50);
	console.debug(result);
	console.debug(window);
</script>

直接当作参数传递

setTimeout(function(){
	console.debug("恭喜像乌龟喜提绿帽子一顶");
},1000);

5. 闭包

在函数中可以使用该函数外的变量,类似于java中调用代码块之外的变量。

实例:

var msg = "666";
function sayMsg(){
	console.debug(msg);
}
sayMsg();

6.jQuery事件机制回顾和加强

6.1 常见的三种事件注册方法:

1、$("#btn").click(function(){})

2、$("#btn").bind(‘click’,function(){})

3、$("#btn").on(‘click’,function(){})

6.2 事件委托

事件绑定的功能有局限:绑定事件的元素必须是页面加载时已经存在的元素,对于之后出现的元素是不起作用的,而事件委托就可以处理这个问题;

语法

事件绑定

$("a.delete").bind("click",function(){
 	console.debug("XXX");	
}) 

事件委托

//delegate(selector,[type],[data],fn)
$("#userForm").delegate("a.delete",'click',function(){
	console.debug("XXXX")
})

7.事件命名空间

管理同一事件的不同监听器。

例如:某个按钮可能同时绑定了两个点击事件做出不同的响应,但在某种情况下需要取消其中一个事件的绑定,就可以使用这个功能。

真的是个很鸡肋的设计了。

<script type="text/javascript">
	$(function(){	
		$("#btn1").on("click.1",function(){
			alert("喜提绿帽子一顶!");
         })							 
        $("#btn1").on("click.2",function(){
            alert("喜提绿帽子第二顶!");
	   })		
 		$("#btn1").off("click.2");
     })
</script>
	</head>
	<body>
		<input type="button" id="btn1" value="云小贱"/>
		<input type="button" id="btn2" value="向乌龟"/>
	</body>

8.JQuery的继承

给jQuery对象进行功能扩展,就应该在原型prototype上扩展;

jQuery源码:就是在扩展原型jQuery.fn = jQuery.prototype=$.fn.

扩展分为单一扩展(一次扩展一个功能)和连续扩展 一次有多个功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值