js中call()方法--详解

 call()方法--改变this指向

function foo(){
   setTimeout(()=>{
      console.log('id:',this.id)
    },100)
}
    var id=21
    foo.call({id:42}) //打印结果id:42
    window.color="red";
    document.color='yellow';
    var s1 = {color:'blue'};
    function changeColor(){
        console.log(this)
        console.log(this.color);
    }

    changeColor.call();//red 什么也不传,默认this指向window
    changeColor.call(window);//red
    changeColor.call(document);//yellow
    changeColor.call(this);//red
    changeColor.call(s1);//blue  传入s1,就打印出s1的color值,此处说明call方法可以改变this的指向

 js中call()方法--详解_第1张图片

    var pet={
        words:'hello everyone',
        speak:function(say){
            console.log(say+':'+this.words)
        }
    }
    pet.speak('suo') //suo:hello everyone
    var dog = {
        words:'wang'
    }
    pet.speak.call(dog,'suo') //suo:wang 将this指向改成了dog

 ----------------知识点---------------

都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。一般来说,this总会指向调用某个方法的对象,但是使用call和apply方法时候,就会改变this的指向。

call.(thisOject, arg1 ,arg2 ...)

因为apply()和call差不多,只不过apply第二个参数必须传入的是一个数组,而call 第二个参数可以是任意类型。

  call()方法--实现继承

    function one(){
        this.name = 'suo';
        this.mytext = function(txt){
            console.log('i am a ',txt)
        }
    }
    function two(){
        one.call(this)
    }
    var three = new two();
    three.mytext('fish')
    console.log(three.name)

 

你可能感兴趣的:(✿✿--js,js)