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神器 谷歌浏览器