前端day12 作用域 作用域链 闭包 JS块状作用域 JS对象和构造函数 JS原型和原型链 JS-Object对象 JS获取页面中元素-给元素添加事件-设置元素样式 JS使用技巧-获取元素-设置样式-定时器

2.1构造函数和对象

构造就是类

function User([参数]){

  this.属性=值;

  this.属性=值;

  this.方法=function(){

  }

}

#实例一个对象

new 构造函数();

如果构造函数没有参数 可以 不加()

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>类和对象</title>
</head>
<body>
	<h1>类(构造函数)和对象</h1>
	<script>
		//构造函数就是类
		//定义一个 构造函数 跟函数 一模一样
		function User(name,age){
			this.userName=name;   				//userName相当于创建属性  name和age是传进来的值
			this.userAge=age;

			//声明一下对象的方法
			this.getInfo=function(){
				console.log('姓名:'+this.userName+',年龄:'+this.userAge+'<br>')
			}
		}
		//实例化对象
		var a =new User('小芳',17);
		console.log(a);

		//使用对象的属性
		console.log(a.userName);
		console.log(a.userAge);

		//调用对象的方法
		a.getInfo();
		//一个构造函数(类) 能够实例化成多个对象 
		var b =new User('小红',18);
	</script>
</body>
</html>

2.2 JS原型和原型链

原型

每个对象都有原型(原型仍然是一个对象)

对象可以继承原型的属性和方法

__proto__没有对象都有改属性

原型链

原型作为对象也有原型

原型的原型的原型 就构成了 原型链

使用对象中某个属性的时候,先从对象中找,如果没有,从原型上找,原型如果也没有,继续向上找

直到顶层(顶层的原型对象是一个类型(类)(构造函数)是object的对象)

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>原型</title>
</head>
<body>
	<h1>同志交友</h1>
	<hr>
	<script>
		function User(){  //原型相当于父类
			this.name='小丽丽';
		}
		let u =new User();

		console.log(u);
		console.log(u.__proto__)
		console.log(u.__proto__.__proto__)
		console.log(u.__proto__.__proto__.__proto__)

		console.log(u.name)
		console.log(u.toString);//来自原型

		//再定义一个对象 object是系统内置的构造函数
		var a=new object();
		a.__proto__ =u;

		console.log(a)
		console.log(a.name)

		//__proto__该属性指向该对象的原型

	</script>
</body>
</html>

2.3JS对象属性的调用

obj.name

obj.age

[]

obj['name']

obj['age']

obj['user-name']

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Object</title>
</head>
<body>
	<script>
		
		//系统内建的构造函数 Object
		var o = new Object();


		//创建好对象之后,再给对象添加属性和方法
		o.name = '小丽丽';
		o.age = 10;
		o.getInfo = function(){
			console.log(this.name, this.age)
		}

		console.log(o)
		console.log(o.name)
		console.log(o.age)
		o.getInfo()



		var o1 = new Object();
		//o1.__proto__ = o;

		console.log(o1);

		console.log('');


		//实例化一个 Object类 的对象   简写
		// python的key这里叫属性
		var data = {'name':'小丽丽', age:19, address:'上海', getInfo:function(){
			console.log('getInfo');
		}}; //python的字典
		data.grade = '11';

		console.log(data.constructor);
		console.log(data);
		console.log(data.name);
		data.getInfo();



		//声明对象的时候 属性可以不加引号。 但是有些情况必须要加(属性名)
		var content = {
			name: '小芳',
			age:100,
			'user-name':'丽丽',
			user_name:'大丽丽'
		};
		console.log(content);

		//调用属性
		console.log(content.name)
		console.log(content.user_name)
		console.log(content['user-name'])
		console.log(content['name'])

		//所有的属性 都可以通过 [] 调用
		var b = 123;
		console.log(b['constructor'])






	</script>
</body>
</html>

总结语法:类与类之间是不能继承的  对象与对象之间是可以继承的    对象与对象之间继承称之为原类 o1.__proto__=o;  //o1的原型是o

constructor到底是什么?就为看一下他的构造函数是怎么样的。

2.4object构造函数

js内建的构造方法叫object

var obj =new object()

josn方式定义对象 

var obj={属性:值,属性:值} //new object的简写

object的构造含的是object

3.实用技巧

3.1从页面获取元素

document.getElementById() 根据ID的值 #获取的是元素对象
document.getElementsByTagName() 根据标签名 #多了s说明获取由元素对象组成的类数组对象
document.getElementsByClassName() 根据class的值 #多了s说明获取由元素对象组成的类数组对象
document.getElementsByName() 根据name属性的值 #多了s说明获取由元素对象组成的类数组对象

上述只是作为了解一般用下面这种 

document.querySelector(css选择器)
document.querySelectorAll(css选择器)

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>获取页面元素</title>
</head>
<body>
	<h1>同志交友</h1>
	<hr>

	<ul class="news-list">
		<li><a href="#">long time no see so i can not say something</a></li>
		<li><a href="#">long time no see so i can not say something</a></li>
		<li><a href="#">long time no see so i can not say something</a></li>
		<li><a href="#">long time no see so i can not say something</a></li>
		<li><a href="#">long time no see so i can not say something</a></li>
	</ul>
	<div id="box"></div>

	<script>
		var boxEle=document.querySelector('#box');
		console.log(boxEle);  //这个就是输出元素的特性会把样子进行输出
		console.dir(boxEle);
		var li=document.querySelector('.news-list li');
		console.log(li);
		li.innerHTML = '哈哈哈,我是第一个'; //innerHTML重新给标签里面里面赋值

		//获取所有li元素
		var lis =document.querySelectorAll('.news-list li');

		//console.log(lis);

	</script>
</body>
</html>

3.2给元素绑定事件

先获取元素

ele.onclick=function(){

}

获取元素的类数组对象,遍历挨个给每个元素绑定事件

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>给元素绑定事件</title>
	<style>
		.list{
			list-style: none;
			padding: 0;
			margin: 0;
			 600px;
		}
		.list li{
			padding: 10px;
			margin: 5px 0px;
			border: 1px solid red;
		}
		#btn {
			border: 1px solid #ccc;
			padding: 10px 20px;
			background: #f5f5f5

		}
		
	</style>
</head>
<body>
	<h1>同志交友</h1>
	<hr>
	<button id="btn">点我</button>
	<ul class="list">
		<li>long time no see i can say no</li>
		<li>long time no see i can say no</li>
		<li>long time no see i can say no</li>
		<li>long time no see i can say no</li>
		<li>long time no see i can say no</li>
		<li>long time no see i can say no</li>
	</ul>
	<script>
		//要给btn绑定元素
		var btn=document.querySelector('#btn');
		//绑定事件
		btn.onclick=function() {
			this.innerHTML='好疼';
		}
		//给每个li元素都绑定事件
		var lis=document.querySelectorAll('.list li')
		//遍历,给每个元素绑定事件
		for (let i=0;i<lis.length; i++){   //循环8次就不是全局的了  let是局部的不是全局的
			lis[i].onclick=function(){
				//this表示 目前点的这个元素
				this.innerHTML='我被点了';   //var和let
				// lis[i].innerHTML='我被点了' //被点的话lis[8] for循环早执行完了 
			}
		}
	</script>
</body>
</html>

前端element神器 谷歌浏览器

原文地址:https://www.cnblogs.com/wangmiaolu/p/9508970.html