美文网首页饥人谷技术博客
关于this的一点心得

关于this的一点心得

作者: _咸鱼君 | 来源:发表于2015-11-25 23:41 被阅读73次

    最初学习js时,因为和面向对象语言中的语法混淆,一直认为this指向的是当前对象,在实际应用中吃了不少亏,今天根据之前阅读过的书和文章来讲解一下。

    独立函数的调用:

    
    function func(){
    
    console.log(this);
    
    }
    
    func();//Window
    
    

    这种模式是我们最常见的模式,在全局作用域中声明一个函数,并调用它,此时函数中的this指向全局对象。

    作为对象方法调用:

    
    function say(){
    
    console.log(this);
    
    }
    
    var obj = {
    
    name:"hehe",
    
    say:say
    
    };
    
    obj.say();//Object {name: "hehe"}
    
    

    当函数作为一个对象的方法调用时,函数中的this绑定到了这个对象。

    使用call或apply来调用函数

    
    function func(){
    
    console.log(this);
    
    }
    
    var obj = {
    
    name:"hehe"
    
    };
    
    func.call(obj);//Object {name: "hehe"}
    
    func.apply(obj);//Object {name: "hehe"}
    
    

    当使用call()或apply()函数进行函数调用时,传入参数对象的将被设置为函数体内this的值,这两个函数都是设置调用函数体内的this值的,且第一个参数都为this,区别是第二个参数apply()是一个参数组arguments,参数都是以数组[]的形式传入,而call(),传递给他的参数必须一个一个写出来。例如

    
    function func(a,b){
    
    console.log(a+b);
    
    }
    
    var obj = {
    
    name:"hehe"
    
    };
    
    func.call(obj,1,2);//3
    
    func.apply(obj,[1,2]);//3
    
    

    new来调用函数

    
    function Dog(name){
    
    this.name = name;
    
    console.log(this.name);
    
    }
    
    var dog = new Dog('hehe');//hehe
    
    

    当使用new来调用一个函数时,会创建一个新的对象,然后绑定到Dog()调用中的this。

    以上是我对this的一点粗略认识,还有许多细枝末节需要注意,这是我第一篇技术博客,之后在建立更全面的this知识体系后会调整风格完善关于this的研究。

    相关文章

      网友评论

        本文标题:关于this的一点心得

        本文链接:https://www.haomeiwen.com/subject/enqdhttx.html