zoukankan      html  css  js  c++  java
  • JavaScript中this的一些练习

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    .father {
    100px;
    height: 100px;
    background-color: red;
    }
    .child {
    20px;
    height: 20px;
    background-color: yellow
    }
    </style>
    </head>
    <body>
    <div class="father">
    <div class="child"></div>
    </div>
    <script src="jquery-1.11.2.min.js"></script>
    <script>
    //on方法会向事件监听的处理函数传递一个参数 event.target 处理函数内部的this指向
    // event.target 所以打印出来的this就是event.target 即<div class="child"></div>

    // $('.child').on('click',function(){
    // console.log(this); //<div class="child"></div>
    // })


    //事件委托,首先按字面的意思就能看你出来,是将事件交由别人来执行,
    // 再联想到上面讲的事件冒泡,是不是想到了?对,
    // 就是将子元素的事件通过冒泡的形式交由父元素来执行。
    // 事件委托不仅实现相同了功能,而且大大减少了DOM操作。

    //监听.father下的.child的点击事件
    // $('.father').on('click','.child',function(){
    // console.log(this); //<div class="child"></div>
    // })
     
    // $('.child')[0].on('click',function(){
    // console.log(this);//<div class="child"></div>
    // })

    var app={
    init:function(){//init()里面的this指的是app
    this.$father=$('.father');//给app这个对象绑定一个属性$father
    this.$child=$('.child');//给app这个对象绑定一个属性$child
    this.bind();//app.bind()
    },
    bind:function(){
    var _this=this;//this指的是app

    //监听.father点击事件 监听到click时 向this.sayHi传递了event.target
    //即.father的dom对象<div class="father"><div class="child"></div></div>
    this.$father.on('click',this.sayHi);

    // 将_this.sayHello()改写为_this.sayHello.call(_this)
    // sayHello在执行的时候 内部的this指向的app对象本身
    this.$child.on('click',function(){
    _this.sayHello();
    })

    //如果没有bind(this),this.sayBye会接受到传递的event.target即.child的dom对象
    // 但此时手动绑定了this 而绑定的this与拒收的this是一致的 指代的是app对象
    this.$child.on('click',this.sayBye.bind(this))
    },
    sayHi:function(){
    console.log('sayHi',this)//<div class="father"><div class="child"></div></div>
    },
    sayHello:function(){
    console.log('sayHello',this)//app
    },
    sayBye:function(){
    console.log('sayBye',this)//app
    }
    }
    app.init();
    </script>
    </body>
    </html>
  • 相关阅读:
    Git——版本管理工具(一)
    【转载】Linux cgroup资源隔离各个击破之
    【转载】Linux cgroup资源隔离各个击破之
    【SSD,FIO,SAS选择的一些小结】SSD,FIO,SAS选择的一些小结
    【转载】MySQL5.6.27 Release Note解读(innodb及复制模块)
    【转载】mysql主键的缺少导致备库hang
    【转载】备库由于表无主键导致延迟
    [转载]阿里云MySQL优化主从同步,降低数据延迟
    [转载]mysql中实现行号,oracle中的rowid
    [转载]常见slave 延迟原因以及解决方法
  • 原文地址:https://www.cnblogs.com/cmy1996/p/9108722.html
Copyright © 2011-2022 走看看