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绑定并不会影响函数本身
    */
  • 相关阅读:
    读取web.xml中设置的参数
    在服务端中,读取properties资源文件中的数据
    window下,nodejs安装http-server,并开启HTTP服务器
    跨域请求资源的方式
    IView 给Submenu增加click事件失效解决方案
    Vue -- mounted方法中调用methods的方法(并取出mounted方法中回调函数的值)
    IView 使用Table组件时实现给某一列添加click事件
    物联网协议CoAP协议学习
    电脑操作
    物联网协议
  • 原文地址:https://www.cnblogs.com/BlueCc/p/11664559.html
Copyright © 2011-2022 走看看