关于JavaScript中this的指向问题

JavaScript中设计最出色的就是它的函数实现,函数是JS的基本单元,而this又是函数里面特别重要的一个属性。

this和其他的语言指向不太一样,在JavaScript中this的值取决于调用的模式。

在JavaScript中一共有4种调用模式:方法调用模式、函数调用模式、构造器调用模式和apply调用模式。不同的模式在如何初始化this上存在差异。

先说下方法调用模式和函数调用模式的区别:当一个函数被保存为对象的一个属性时,我们称他为一个方法。当一个函数并非一个对象的属性时,那么它就是被当作一个函数来调用的。

一、方法调用模式

当一个方法被调用时,this被绑定到该对象上面。如果调用方式包含一个提取属性的动作(包含一个.点表达式或者[subscript]下标表达式),那么它就是被当作一个方法来调用。

//创建myObject对象,它有一个value属性和一个incurement方法
//incremtnt方法接受一个可选的参数。如果参数不是数字,那么默认使用数字1;
var myObject = {
    value: 0,
    increment: function(inc){
        this.value += typeof inc === ‘number‘ ? inc : 1;
    }
};
myObject.increment();
document.wirteln(myObject.value);    //1

myObject.increment(2);
document.wirteln(myObject.value);    //3

this指向的为调用该方法的对象。

二、函数调用模式

当一个函数并非一个对象的属性时,那么它就是被当作一个函数来调用的:

var sum = add(3,4);    //sum 的值为7

此模式下调用函数,this被绑定到全局对象。页面上的话全局对象就是window对象。node下应该是global对象。

特此强调:即使在函数内部调用,只要属于函数调用模式,this也是指向window对象。例子如下:

var value = 5;
var myObject = {
    value : 3,
    showValue: function(){
        var value = 4;
        var helper = function(){
            console.log(this.value);
        };
        helper();        //5
    }
}
myObject.showValue();

在执行helper函数的时候,其中的this并不是指向它的外部函数showValue,也没有指向myObject对象,而是全局对象。

三、构造器调用模式

构造器调用简单点讲就是指构造函数的创建,就是new一个对象。js每一个函数即是普通的函数,也是一个构造函数,可以直接使用new关键字创建一个实例对象。

var my = function(value){
    this.value = value;
    this.fun = function(){
        console.log(this.value);
    }
}

var myObj = new my(‘first‘);
myObj.value = ‘second‘;
myObj.fun();        //‘second‘

new 在实例化一个对象的时候,会经历以下4个步骤:

1、创建一个新对象

2、讲构造函数的作用域赋给新对象(就是将this指向了这个新对象)

3、执行构造函数中的代码(为这个新对象添加属性)

4、返回这个新对象

所以,该模式下this指向的是实例化的对象。

四、Apply调用模式

因为JavaScript是一门函数式的面向对象编程语言,所以函数可以拥有方法。

apply方法接受两个参数,第一个是要绑定的this的值,第二个是一个参数数组。

当一个方法调用apply方法的时候,首先是用apply的第一个参数替换调用方法的this对象,

然后用apply的第二个参数代替该方法的参数。

时间: 2024-12-27 14:17:33

关于JavaScript中this的指向问题的相关文章

javascript中this的指向

作为一个前端小白在开发中对于this的指向问题有时候总是会模糊,于是花时间研究了一番. 首先this是JS的关键字,this是js函数在运行是生成的一个内部对象,生成的这个this只能在函数内部使用. 但是随着函数使用场合的不同,this的值会发生变化.有一个原则不会变,那就是this指的是,调用函数的那个对象. demo1: 此时函数运行的结果是 1 ,x是全局变量,因为匿名函数demo()是被window调用的,原始写法是window.demo(),因为demo()是被window调用的,所

Javascript中的this指向。

一.JavaScript中的函数 在了解this指向之前,要先弄明白函数执行时它的执行环境是如何创建的,这样可以更清楚的去理解JavaScript中的this指向. function fn(x,y,name){ var str1=x; var str2=y; this.name=name; function(){ alert(str1,str2); } }fn(1,1,Admin); 当调用fn(1,1,Admin)时,首先函数会创建一个活动对象,也叫做变量对象,接着为函数调用创建一个类似数组的

javascript中this的指向问题

想学好javascript不是一件容易的事,而this就是其中一道坎,尤其是在用js进行面向对象开发的时候. 实际上,想要彻底搞懂this的指向确实不是一件容易的事,在<你不知道的javascript 上卷>一书中更是花了很大篇幅详细总结了this的四种指向情景.我在艰难的啃完这本书和大量阅读<javascript高级程序设计>.博文.以及大量实践中终于是弄懂了this.确实是,有些知识是需要反复验证.理解.总结,直至豁然开朗,构建成属于自己的理论体系. 那么进入正文: javas

JavaScript中的this指向

this是谁 技术一般水平有限,有什么错的地方,望大家指正. this代指当前对象super调用父类的构造函数,应表会运网数物,加载驱动建立链接执行SQL处理结果,直到现在每想起这三点就能想起我上大学的时候,故事背景都是不同的有时候是我玩的正high的时候有时候是我快要睡觉,但是结果都是一致的就是让老师教育几句.现在就介绍一下Javascript中的this. 说this的我们一般都说指向,代表,因为它不是固定的,今天是王麻子明天可能就是二狗子,它是谁不能确定,但是有一点是肯定的它永远指向让它起

JAVASCRIPT中的THIS指向问题

在深入学习JavaScript之后,我们越来越多的会遇到函数或者在对象内部中,对于this的指向问题的疑惑,其实基本上每一个编程语言中都有一个this,这个this的指向都是大同小异,你也可以汉化它的意思,this的意思是这个,就是本身的意思,那么在JavaScript中,我们的this代替的那个本身到底会随着代码情况的不同而有什么变化呢?今天,我们就来一体探讨一下JavaScript中关于this的指向问题: 首先呢,this可以指向window对象,和其他调用它的对象,当然,在严格模式下,它

Javascript 中的this 指向的对象,你搞清楚了吗?

Javascript 中的this 总让人感到困惑,你能分清以下三种test1(),test2(),test3() 情况下的输出吗? 注:以下Javascript运行环境中为浏览器 //1 this在全局函数中使用 var x = 1; function test1() { var  x = 5; alert(this.x); } function _test2() { this.x = 5; alert(this.x); } //2 this 在构造函数中 new 中使用 function t

javascript中this的指向(着重分析匿名函数的this指向)

1.this的意义(this是什么?): http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用. https://zhuanlan.zhihu.com/p/23804247 this 是你 call 一个函数时传的 context https://dmitripavlutin.com/g

JavaScript 中的this指向问题

全局执行     首先,我们在全局环境中看看它的 this 是什么:     浏览器:     console.log(this);     // Window {speechSynthesis: SpeechSynthesis, caches: CacheStorage, localStorage: Storage, sessionStorage: Storage, webkitStorageInfo: DeprecatedStorageInfo…}     可以看到打印出了 window 对

第149天:javascript中this的指向详解

js中的this指向十分重要,了解js中this指向是每一个学习js的人必学的知识点,今天没事,正好总结了js中this的常见用法,喜欢的可以看看: 1.全局作用域或者普通函数中this指向全局对象window. 1 //直接打印 2 console.log(this) //window 3 4 //function声明函数 5 function bar () {console.log(this)} 6 bar() //window 7 8 //function声明函数赋给变量 9 var ba