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人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦