• day52


    JS高级

    一、函数高级

    1、函数回调

    // 回调的函数
    function callback(data) {}
    // 逻辑函数
    function func(callback) {
        // 函数回调
        if (callback) callback(data);
    }
    
    // 函数回调的本质:在一个函数中(调用函数),当满足一定条件,调用参数函数(回调函数)
    // 回调函数作为调用函数的参数传入
    // 回调函数通过参数将调用还是内部数据传出
    

    2、闭包

    function outer() {
        var data = {}
        function inner() {
            return data;
        }
        return inner;
    }
    
    // 闭包目的:不允许提升变量作用域时,该函数的局部变量需要被其他函数使用
    // 闭包本质:函数的嵌套,内层函数称之为闭包
    // 闭包的解决案例:①影响局部变量的生命周期,持久化局部变量;②解决变量污染
    

    二、循环绑定

    .html文件
    <ul>
    	<li>列表项</li>
        <li>列表项</li>
        <li>列表项</li>
    </ul>
    
    .js文件
    var lis = document.querySelector('li');
    for (var i = 0; i < lis.length; i++) {
        lis[i].onclick = function () {
            // 打印列表项的索引
    		console.log(i);
    	}
    }
    // 变量污染
    // 获取局部作用域解决
    // 闭包解决
    // 对象属性解决
    

    三、面向对象JS

    1、属性与方法

    var obj = {}; | var obj = new Object();
    // 属性
    obj.prop = "";
    // 方法
    obj.func = function () {}
    // 删除属性与方法
    delete obj.prop
    delete obj.func
    

    2、类字典结构使用

    • 结构
    var dict = {name: "zero", age: 18}
    
    • 拓展
    var dict = {"my-name": "zero", fn: function () {}, fun () {}}
    
    • 使用
    dict.name | dict["my-name"] | dict.fn()
    

    3、构造函数(ES5)

    function People(name, age) {
        this.name = name;
        this.age = age;
        this.eat = function () {
            return 'eat';
        }
    }
    

    4、继承(ES5)

    // 父级
    function Sup(name) {
        this.name = name;
        this.fn = function () {
            console.log('fn class');
        }
    }
    // 原型
    console.log(Sup.prototype);
    console.log(sup.__proto__);
    // 子级
    function Sub(name) {
        // 继承属性
        Sup.call(this, name);
    }
    // 继承方法
    Sub.prototype = new Sup;
    // 创建子级对象
    var sub = new Sub("subClass");
    // 使用属性
    console.log(sub.name);
    // 使用方法
    sub.fn();
    
    // 指向自身构造函数
    Sub.prototype.constructor = Sub;
    

    5、类及继承(ES6)

    // 父类
    class People {
        // 构造器
        constructor (name, age) {
            this.name = name;
            this.age = age;
        }
        // 实例方法
        eat () {
            console.log('吃吃吃');
        }
        // 类方法
        static create () {
            console.log('诞生');
        }
    }
    // 子类
    class Student extends People {
        constructor (name, age) {
            // super关键词
            super(name, age)
        }
    }
    

    四、定时器

    • setInterval
    • setTimeout
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>自我整理</title>
    	<style>
    		ul{
    			margin:0;
    			padding: 0;
    			list-style: none;
    		}
    		li {
    			 80px;
    			height: 35px;
    			background-color: pink;
    			border-radius: 5px;
    			float: left;
    			margin-left: 5px;
    		}
    	</style>
    </head>
    <body>
    	<ul>
    		<li></li>
    		<li></li>
    		<li></li>
    		<li></li>
    		<li></li>
    	</ul>
    </body>
    <script>
    	//属性解决绑定变量污染
    	var lis = document.querySelectorAll('li');
    	for (var i = 0; i < lis.length; i++) {
    		lis[i].index = i;
    		lis[i].onclick = function () {
    			var index = this.index;
    			alert(index)
    		}
    	}
    </script>
    
    <script>
    	//初识JS面向对象
    	var obj = {};
    	obj.name = 'yxf'; //对象设置属性,以及属性值
    	obj.eat = function () { //给对象设置方法
    		console.log('吃吃吃');
    		alert('chichi')
    	}
    	console.log(obj.name);
    	obj.eat();
    </script>
    
    <script>
    	//构造函数
    	//特定的语法与规定:
    	// 1.采用首字母大写(驼峰体)
    	// 2.内部可以构建属性和方法,通过this关键词
    	function Person(name,age) {
    		this.name = name;
    		this.age = age;
    		this.eat = function () {
    			console.log(this.name+'吃屎包子');
    		}
    	}
    	// 关键词,创建对象并实例化
    	var p1 = new Person('sql','18');
    	var p2 = new Person('lay','63');
    	console.log(p1.name,p1.age);
    	p2.eat();
    	// 总结
    	// 1.构造函数可以创建多个对象,{}构建出的对象是唯一的
    	// 2.属性与变量的语法规则不一样
    </script>
    
    <script>
    	// js获取页面元素,操作页面元素内容与样式
    	// 数据,面向对象思想让做操数据更加边界与容易
    
    	// js中没有字典(键值对存储数据的方式,但可以通过对象实现字典方式存储数据并使用数据)
    	var dict = {
    		key1 : 'one',
    		key2 : 'two',
    		'key-3' : '你真棒!'
    	}
    	console.log(dict['key-3']);
    	// 总结:
    	// 1.key全为字符串形式,但存在两种书写方式
    	// 2.key在js语法支持情况下,可以省略引号,但key为js标识符不支持的语法情况下,添加引号
    	// 3. value可以为任意类型
    	// 4.访问值可以通过字典名(对象名).key语法与['key']来访问value
    	// 5.可以随意添加key与value完成增删改查
    </script>
    
    
    <script>
    	// 重点
    	// 面向对象的三大特性:继承 封装 多态
    
    	// js重点:继承
    	// 1. 完成继承,必须拥有两个构造函数
    	// 2. 一个函数要使用另外一个函数的属性与方法,需要对其进行继承(属性与方法的复用)
    	// 3. 属性的继承通过call方法,在继承函数中由被继承函数调用,传入继承函数的this与被继承函数创建属性对属性进行赋值的所有需要的数据,eg:如Sup有name属性,那么可以通过call将Sub的name传给Sup.
    	// 4.方法的继承prototype原型
     
    	// 类似于父级
    	function Sup(name) {
    		this.name = name;
    		this.func = function () {
    			console.log('继承的方法');
    		}
    	 } 
    	 // 类似于子级,Sub继承于Sup
    	 function Sub(name) {
    	 	Sup.call(this,name);
    	 }
    	 Sub.prototype = new Sup;
    	 var sub_obj = new Sub('sub-name');
    	 console.log(sub_obj.name);
    	 sub_obj.func();
    </script>
    
    <script>
    	// ES6
    	// 类产生多对象
    	class People{
    		constructor(name){
    			this.name = name;
    		}
    		eat () {
    			console.log('ES6.吃吃吃');
    		}
    		static create () {
    			console.log('类方法');
    		}
    	}
    	var p1 = new People('p1-name');
    	var p2 = new People('p2-name');
    	p1.eat();
    	People.create();
    	//继承
    	class Stdent extends People{
    		constructor(name,age,sex){
    			super(name);
    			this.sex = sex;
    			this.age = age;
    		}
    	}
    	let s1 = new Stdent('王五',19,'male');
    	console.log(s1.name,s1.age,s1.sex);
    
    	s1.eat();
    
    	Stdent.create();
    </script>
    </html>
    
  • 相关阅读:
    Python一键安装缺失库
    Python画樱花树❀
    Python时间模块time
    Python的画五角星
    力扣225.用队列实现栈
    STL是个啥?
    如何使用递归遍历对象获得value值
    JS操作未跨域iframe里的DOM
    CSS3D效果
    前端轮播小结
  • 原文地址:https://www.cnblogs.com/yaoxiaofeng/p/9800656.html
Copyright © 2020-2023  润新知