• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

详解JavaScript原型对象的this指向问题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、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指向

1、call()方法

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

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

在函数内部打印this,调用函数,看其this的指向。


可知this指向window对象,如果我们想让this指向我们新创建的一个对象,怎么操作呢?

先定义一个对象,

o = {};

然后通过call()修改this指向,让其指向新创建的对象o

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

打印结果为:


现在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()方法接收参数的形式是数组参数。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注极客世界的更多内容!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Vue之自定义事件内容分发详解发布时间:2022-02-05
下一篇:
M1 pro芯片启动Vue项目的方法步骤发布时间:2022-02-05
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap