美文网首页
JavaScript中的this

JavaScript中的this

作者: 机场等轮船 | 来源:发表于2018-01-22 22:38 被阅读0次

    this一直是JavaScript中的一个疑点难点。了解this以及掌握this的使用,是作为一个前端人必须的一项能力。跟别的语言大相庭径的是,JavaScript中的this总是指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数声明时的环境。

1.1  this的指向

除去不常用的with和eval的情况,this的指向大概可以分为4类:

    作为对象的方法调用。

    作为普通函数调用。

    构造器调用。

    Function.prototype.call 或者 Function.prototype.apply 调用。

1.作为对象的方法调用,this指向该对象。

    var obj = {

        a: 1,

       getA: function() {

            alert(this === obj);        //true

            alert(this.a);        //1

        }

    };

2.作为普通函数调用

当函数不作为对象的属性被调用时,也就是我们常说的普通函数方式,此时的this总是指向全局对象。在浏览器的JavaScript中,这个全局对象就是window。

window.name = 'globalName';

var getName = function() {

    return this.name

};

console.log(getName());    //globalName

作为普通函数调用时,如果是在dom元素的回调中,回调内部的this指向的是window;如果想this指向dom元素,可以在回调函数中,使用 “var self = this;",此类的方法,使用一个变量来保存对dom元素的引用。需要注意的时,在严格模式中,此时的this,不是指向全局对象,而是undefined。

3.构造器调用

var MyClass = function() {

    this.name = "lily";

};

var obj = new MyClass();

alert(obj.name);        //lily

但是new调用构造器时,还要注意一个问题,如果构造器显式的返回了一个object类型的对象,那么此次运算最终结果会返回这个对象,而不是this。

var MyClass = function() {

    this.name = "lily";

    return {

        name: "lucy"

    }

};

var obj = new MyClass();

alert(obj.name)        //lucy

4.Function.prototype.call 和 Function.prototype.apply 调用

跟普通的函数调用相比,用Function.prototype.call 和 Function.prototype.apply 可以动态的改变传入函数的this。

var obj1 = {

    name: "lily",

    getName: function() {

        return this.name;

    }

};

var obj2 = {

    name: "lucy"

};

console.log( obj1.getName() );    // lily

console.log( obj1.getName.call( obj2 ) );    //lucy

相关文章

  • 1body中添加js

    1 中的 JavaScript JavaScript 函数和事件上面例子中的 JavaScript 语句,会...

  • JS中的类型转换

    JavaScript 中的类型转换 JavaScript 基本数据类型 JavaScript 中的一共有 8 中内...

  • js中的this

    javascript中的this javascript中的this与java中的this有点不同。ECMAScri...

  • JavaScript中的字符串

    @(javascript)[js字符串][toc] JavaScript中的字符串 字符串是JavaScript中...

  • 06-JavaScript数组和函数

    JavaScript数组 JavaScript中的数组可以存储不同类型的数据 JavaScript中的数组是引用类...

  • Client's JavaScript

    什么是JavaScript? JavaScript的运行环境? 浏览器中JavaScript可以做什么? 浏览器中...

  • javascript中的this

    一般说到JS的this,都会想起在函数中变来变去的this。但是事情的发生都是有规则的约束,JS中的this也不例...

  • JavaScript中的this

    什么是this? 首先对this的下个定义:this是在执行上下文创建时确定的一个在执行过程中不可更改的变量。th...

  • JavaScript中的this

    JavaScript中的this很容易让人迷惑,但弄清楚后其实还是很好区分的。JavaScript中的this总是...

  • javascript中的this

    在javascript中的this大致可以理解成谁调用的this就指向谁 全局环境中的this 函数中的this ...

网友评论

      本文标题:JavaScript中的this

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