详解JavaScript原型对象与this指向机制

作者:代码拾荒

时间:2026-10-24

浏览:279

本文深入解析JavaScript中this关键字的指向规则,重点探讨构造函数与原型方法中this的区别。通过实例验证原型方法中this指向调用者。同时详细讲解如何利用call和apply方法手动修改函数执行时的this指向,并对比两者在参数传递方式上的核心差异。

文章目录

一、this指向

在构造函数内部,this关键字通常指向当前创建的实例对象。那么,定义在原型对象上的方法,其内部的this又指向哪里呢?

为了验证这一点,我们可以进行如下测试:


function Student(age,name){
            this.age = age;
            this.name = name;
        }
        var that;
        Student.prototype.score = function(){
            console.log('孩子们成绩都很好!');
            that = this;
        }
        var xl = new Student(18,'小熊');
        xl.score();
        console.log(that === xl);

首先定义一个全局变量that,在构造函数score内部将其赋值为内部的this。接着创建一个实例并调用其score方法,最后比较that与实例对象是否相等。若两者一致,则证明原型方法中的this指向的是该实例对象。

控制台打印结果如下:

一、this指向

从结果可以看出,原型对象中存放的是方法,而该方法执行时的this指向的是方法的调用者,即当前实例对象。

二、修改this指向

1、call()方法

首先编写一个简单的两数相加函数。


 function fn(a,b){
           console.log(a+b);
            console.log(this);
		 }
 fn(1,2)

在函数内部打印this,并直接调用该函数,观察此时this的指向情况。

一、this指向

结果显示this指向window对象(非严格模式下)。如果希望让this指向我们新创建的一个特定对象,该如何操作呢?

首先定义一个空对象:


o = {};

接着利用call()方法改变this的指向,使其指向新创建的对象o。


 o = {
            name: 'xl'
        };
        fn.call(o,1,2);

打印结果如下:

一、this指向

此时this已成功指向新创建的对象o,说明修改成功。

2、apply()方法

apply()方法与call()的功能基本一致,此处不再赘述原理,直接展示代码:


 function fn(a,b){
           console.log(a+b);
            console.log(this);
        }
        o = {
            name: 'xl'
        };
        fn.apply(o,[1,2]);

通过对比可以发现,这两种方法的主要区别在于参数传递的形式:call()要求接收连续的参数列表,而apply()接收的参数必须是一个数组。

总结

本文到此结束,希望能为读者带来帮助,同时也欢迎大家关注本站以获取更多技术内容!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章