批改状态:合格
老师批语:
构造一个函数都有一个原型属性:prototype
本质上构造函数跟普通函数是没有区别。
构造函数的特征:
//声明一个构造函数function User(name,email){this.name=name;this.email=email;}const user=new User("小红","12@qq.com");user.__proto_num=123;console.log(user.num);console.dir(User.prototype);
可以发现构造函数的prototype内也有一个num属性。
实例的原型永远指向它的构造函数的原型,实例的原型从构造函数的原型继承成员(属性或方法);user.__proto__===User.prototype;
注意:需要被所有实例共享的成员,应该写到构造函数的原型上User.prototype.salary="123";
属性通常不应该共享的,他是区分不同对象的标志,方法更适合共享
User.prototype.show=function(){return {name:this.name,email:this.email};}
es6中的类特点
class User2{//代表构造方法constructor(name,email){this.name=name;this.email=email;}//原型方法show(){return {name:this.name,email:this.email}}//静态方法:不需要通过对象调用,直接用类调用就行static fetch(){return this.hello(this.userName);}static userName="小明";static hello(name){return name;}// 私有成员,只能再本类中使用,类外,子类不能调用#age=20;set age(num){this.#age=num;}get age(){return this.#age;}}const user1=new User("累累","12@qq.com");console.log(user1.show());console.log(User2.fetch());user1.age=30;console.log(user1.age);
子类继承父类,需要注意this的指向,使用super来调用父类的构造
class Child extends User2{//子类继承父类的功能,可以拥有自己的属性或方法//子类不饿能访问父类的私有成员constructor(name,email,gender){//调用父类构造方法,确定this指向super(name,email);this.gender=gender;}show(){return {name:this.name,email:this.email,gender:this.gender};}}const child=new Child("工人","123@qq.com",'男');console.log(child.show());
1.querySelectorAll获取全部元素返回数组。
2.querySelector获取单个元素
<body><ul id="list"><li class="item">item1</li><li class="item">item2</li><li class="item">item3</li><li class="item">item4</li><li class="item">item5</li></ul><script>// 1.获取dom元素 返回所有liconst lis=document.querySelectorAll("#list li");// lis是一个类数组let lisArr=Array.from(lis);//改为数组console.log([...lis]);//转为数组//lis类数组可以直接使用forEach()遍历lis.forEach(function(item){console.log(item);});//2.返回一个let first=document.querySelector("#list li");
快速获取某个元素
//创建一个元素
const body=document.body;const ul=document.createElement("ul");ul.classList.add("list");body.appendChild(ul);const li=document.createElement("li");li.innerHTML="item1";ul.appendChild(li);//将html字符串直接解析为dom元素let htmlStr='<i style="color:red">item2</i>';//htmlStr也可以写入多条语句ul.insertAdjacentHTML("beforeEnd",htmlStr);//如果大量添加元素应该使用文档片段完成const frag=new DocumentFragment();for(let i=0;i<5;i++){const li=document.createElement("li");li.textContent="item"+(i+1);frag.append(li);}

更新
let h3=document.createElement("h3");h3.innerHTML="你好!";document.querySelector("li:nth-of-type(1)").replaceWith(h3);//父类操作ul.replaceChild(h3,document.querySelector("li:last-of-type"));

删除
ul.removeChild(document.querySelector(".list h3"));
查询
//查询// 获取所有子元素console.log(ul.children);// 获取子元素数量console.log(ul.children.length);console.log(ul.childElementCount);//第一个元素console.log(ul.firstElementChild);//最后一个console.log(ul.lastElementChild);//父节点console.log(ul.lastElementChild.parentElement);//前一个兄弟const er=document.querySelector(".list li:nth-of-type(2)");console.log(er.previousElementSibling.innerHTML);//后一个兄弟console.log(er.nextElementSibling.innerHTML);

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号