zoukankan      html  css  js  c++  java
  • this指向与绑定

    function cat(age,color){
        console.log(this)
        console.log(color)
    }
    const age1 = 1
    const age2 =2
    const color1 = 'white'
    const color2 = 'black'
    
    //1.函数直接调用:
    cat(age1,color1)
    /*node输出:
        this---->    根据运行环境而定,指向当前运行的环境,浏览器中指向window
        color---->    white
    */
    
    //2.this隐式调用
    const new_cat1 = {
        name:'白猪',
        cat
    }
    //new_cat1.cat(age1,color1)
    /*node输出:
        this---->    { name: '白猪', cat: [Function: cat] }  this指向当前调用cat函数的对象:new_cat1
        color---->    white
    */
    
    //3.this显示调用 call与apply 
    cat.call({name:'白猪'},age1,color1)
    /*node输出:
        this---->    { name: '白猪'}  this指向call()的第一个参数
        color---->    white
    */
    cat.apply({name:'白猪'},[age1,color1])
    /*node输出:
        this---->    { name: '白猪'}  this指向apply()的第一个参数
        color---->    white
    */
    
    //call与apply的结果是一样的,区别在于调用方法的参数的传递形式不一样.
    // call是按照参数顺序依次传入,call(this对象,arg1,arg2...)
    // apply是把参数放入一个数组里,apply(this对象,[arg1,arg2...])
    
    //4.bind强制绑定this
    
    const new_cat2 = cat.bind({name:'黑猪'})   //bind只绑定this,不执行cat函数
    new_cat2(age2,color2)                    //new_cat2执行
    /*node输出:
        this---->    {name:'黑猪'}  this指向bind()里的参数对象
        color---->    black
    */    
    
    const my_cat = {
        name:'白猪',
        new_cat2
    }
    my_cat.new_cat2(age1,color1)     
    /*node输出:
        this---->    {name:'黑猪'} 
        color---->    white
        
         this依然指向new_cat2所bind()里的参数对象,它没有指向my_cat证明bind绑定的this优先级更高
    */
    
    new_cat2.call({name:'白猪'},[age1,color1])
    /*node输出:
        this---->    {name:'黑猪'} 
        color---->    white
        
         this依然指向new_cat2所bind()里的参数对象,它没有指向由call绑定的{name:'白猪'}证明bind绑定的this优先级比call高
    */
    
    cat(2,'black')
    /*node输出:
        this---->    根据运行环境而定,指向当前运行的环境,浏览器中指向window
        color---->    black
        
        单纯执行cat函数时,this依然指向运行环境,说明前面的this绑定并不会影响函数本身
    */
  • 相关阅读:
    数组删除元素注意事项
    点击下拉菜单以外的区域,关闭弹窗
    webpack学习笔记(六)优化
    webpack学习笔记(五)
    webpack学习笔记(四)
    webpack学习笔记(三)
    webpack学习笔记(二)
    es6 笔记
    vue学习笔记——组件的优化
    vue学习笔记——路由
  • 原文地址:https://www.cnblogs.com/BlueCc/p/11664559.html
Copyright © 2011-2022 走看看