为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript里this的三种情况

一,作为global对象

var x = 1;

function fun (){

var x =2;

console.log(this.x);

}

fun();//1

二,作为对象方法的调用

函数还可以某个对象的方法调用,这是这个this就指向这个上级对象;

var Obj ={

name:"MGT360124",

age :17,
}

function getName ( ) {

alert(this.name);

}

Obj.getName = getName;

Obj.getName();//"MGT360124"

三,作为构造函数调用

通过构造函数创建的对象实例object,这时这个this就指向这个object;

function Dog () {

this.name = "大黄";

}
var dog  = new Dog();

dog.name;

js中call和apply方法:改变函数运行时的上下文,也就是说改变函数体内部this的指向
js中函数存在: 函数被定义时的上下文, 运行时的上下文,上下文的改变;

//定义一个构造函数constructor
function  Dog () { }

Dog.prototype = {

     name :"大黄",

     color: "yellow",

     say:function () {

       console.log(this.color);
       } 
}

var dogA = new Dog();

dogA.say();//yellow

但是我们在创建一个对象,不像给这个对象添加方法,怎么去公用上面的这个方法?

var dogB = {

 color :"white",

}
dogA.say.call(dogB);//white

dogA.say.apply(dogB);//white

所以可以看出call()和apply()是为了动态改变this而出现的,当一个对象没有这个方法,但是其他的构造函数有这个方法,那么可以借助call()h和apply()用其他对象的方法来操作

call()和apply的区别
他们的作用是相同的,只是传递的参数不一样
call()方法传递的参数必须直接传给函数
apply()接收两个参数:一个参数是在其中运行的作用域,一个是参数数组

var  dog = function (name,color) { 

     this.name=name;

     this.color = color;

     console.log(this.name +" is "+this.color);
}
var  DaHuang = { }

dog.call(DaHuang,"大黄","yellow");//大黄 is yellow

dog.apply( DaHuang, ["2哈","WhiteAndBlack"] );//2哈 is WhiteAndBlack
点击查看更多内容
5人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消