• BOM介绍以及应用以及this指向问题


    BOM概念:
            BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window。

     window页面加载事件:

    Onload:是窗口 (页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、CSS 文件等), 就调用的处理函数。

            当我们使用window.onload 将要运行得程序进行封装之后,程序得放置位置就没有影响,他是当文档内容完全加载完成会触发该事件,也就是最后才会运行它,所以不在受限与位置

    1. //传统得注册方式
    2. window.onload = function(){
    3. var btn = document.querySelector('button');
    4. btn.onclick=function(){
    5. alert('我被皇上选中了');
    6. }
    7. }
    8. window.onload = function(){
    9. alert('我优先被皇上翻牌');
    10. }

    当同时出现两个传统注册事件,系统会默认运行最后一个,不会运行前面一个

    注意点:
                 1)有了 window.onload 就可把js代码写到元素得上方,因为onload 是等页面内容全部加载完毕,再去执行处理函数。
                 2)window.onload传统注册事件方式只能写一次,如果有多个,会以最后一个window.onload为准

    1. // 解决办法(也是最提倡得一种写法):
    2. window.addEventListener('load', function() {
    3. var btn = document.querySelector('button');
    4. btn.addEventListener('click', function() {
    5. alert('我被皇上选中了');
    6. })
    7. })
    8. window.addEventListener('load', function() {
    9. alert('我和你都被皇上翻牌');
    10. })

    利用addEventListener进行侦听函数是不会出现冲突得问题,写出来的都可以进行运行

    案例:调整窗口大小

    Onresize:当浏览器窗口更改的时候调用。
     window.innerWidth  这个获取的是当前浏览器的宽度 
     注意:只要窗口大小发生像素变化,就会触发这个事件
               我们经常利用这个事件完成响应式的的布局。

    1. <script>
    2. window.addEventListener('load', function() {
    3. var div = document.querySelector('div')
    4. window.addEventListener('resize', function() {
    5. // console.log(window.innerWidth)
    6. if (window.innerWidth <= 600) {
    7. div.style.display = 'none';
    8. }else{
    9. div.style.display = 'block';
    10. }
    11. })
    12. })
    13. script>
    14. <div>div>

    案例:调整窗口大小,改变内部样式

    当浏览器窗口发生达到700px的时候,里面的盒子的大小和颜色都会发生改变 
     window.innerWidth  获取到的是当前的屏幕的宽度

    1. <script>
    2. window.addEventListener('load',function(){
    3. var div = document.querySelector('div');
    4. window.addEventListener('resize',function(){
    5. // if(window.innerWidth<=700){
    6. // div.className = '';
    7. // }else{
    8. // div.className = 'div1';
    9. // }
    10. window.innerWidth<=700 ? div.className = '' : div.className = 'div1'
    11. })
    12. })
    13. script>
    14. <div>div>

    this指向问题  

    一般情况下this的最终指向的是那个调用它的对象

    1)全局作用域或者普通函数或者定时器当中的this 指向全局对象window (注意定时器里面的this指向window)

    1. console.log(this); //在全局作用域下,输出的this指向的就是window
    2. function fn(){
    3. console.log(this)
    4. }
    5. //fn();
    6. window.fn();
    7. setInterval(function(){
    8. console.log(this)
    9. },1000)
    10. //这里面的this指向的也是window , 因为setInterval 前面省略了window,
    11. //在普通函数 ,输出的this指向的就是window

    2)方法调用中谁调用this就指向谁

    1. var o = {
    2. sayHi : function(){
    3. console.log(this); //这里的this指向的是o这个对象
    4. }
    5. }
    6. o.sayHi(); //因为这里o是调用该函数的,所以里面的this就指向调用他的人
    7. var btn = document.querySelector('button');
    8. btn.onclick = function(){
    9. console.log(this); //这里的this指向的是btn这个按钮对象
    10. }
    11. //因为这两个函数的调用者都是button这个按钮,所以里面的this就指向button这个按钮
    12. btn.addEventListener('click',function(){
    13. console.log(this); //这里的this指向的是btn这个按钮对象
    14. })

    3)构造函数(构造函数的首字母必须是大写)中this 指向构造函数的实例

    1. function Fun(){
    2. console.log(this); //这里的this指向的是Fun实例对象
    3. }
    4. var fun = new Fun();
    5. // 因为该函数是构造函数,所以里面的this 指向的是构造函数的实例

  • 相关阅读:
    ⽬标⾏动及稠密环境未知情况下,⽆⼈机跟踪的系统解决⽅案
    「Python入门」python操作MySQL和SqlServer
    常用数学分布
    从零开始Blazor Server(8)--增加菜单以及调整位置
    显示屏DIN 4102-1 Class B1防火测试要求
    LeetCode50天刷题计划(Day 20—— 有效的数独(12.10-13.10)
    【LeetCode】24. 两两交换链表中的节点
    Maven进阶-配置私服(Nexus 的使用)
    vue3中弹框中的el-select下拉组件显示value而不显示label
    Unity WebGL RuntimeError: integer overflow(整数溢出问题)
  • 原文地址:https://blog.csdn.net/m0_72313625/article/details/126630219