手记

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人推荐
随时随地看视频
慕课网APP