第五章 web前端开发工程师--JavaScript高级程序设计 5-8 JavaScript call和apply

                                                                             JavaScript call和apply

 

本节课所讲内容:

  1. JavaScript this的指向问题
  2. JavaScript call和apply
  3. javascript New的使用

                                                                          主讲教师:Head老师

一. JavaScript this的指向问题

函数内:

function f(){

this.name=ass;

}

对象内:

var o = {

print:function(){

console.log(this.name);

}

}

DOM操作:

Var ad= document.getElementById(“ad”);

ad.onclick=function(){

console.log(this);

}

This指向的改变

This.name=“global”;

PS:this的原则 

1.运行时决定 ,this指向的是一个对象。

2.函数中this到底指向谁,由调用此函数时的对象决定,而不是由定义函数所在的对象决定.   

二. JavaScript call和apply

call方法:

语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

定义:调用一个对象的一个方法,以另一个对象替换当前对象。

说明:

call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

apply方法:

语法:apply([thisObj[,argArray]])

定义:应用某一对象的一个方法,用另一个对象替换当前对象。

区别:第一个参数意义都一样。第二个参数:apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。

如 func.call(func1,var1,var2,var3)  对应的apply写法func.apply(func1,[var1,var2,var3]),同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入。

function Obj(){

this.value="对象!";

}

var value="global 变量";

function Fun1(){

alert(this.value);

}

//window.Fun1(); //window

//Fun1.call(window); //window

//Fun1.call(document.getElementById('ad')); //ad  Head

//Fun1.call(new Obj()); //obj

 

var func = new function(){this.a="func"}

var myfunc = function(x){

var a = "myfunc";

alert(this.a);

alert(x);

}

myfunc.call(func,"var");  //对象

//func var

var func = new function(){this.a="func"}

var myfunc = function(x){

var a = "myfunc";

alert(this.a);

alert(x);

}

myfunc.apply(func,['var']);

三. javascript New的使用

new 运算符是用来实例化一个类,从而在内存中分配一个实例对象。

通过new可以产生原对象的一个实例对象,而这个实例对象继承了原对象的属性和方法。因此,new存在的意义在于它实现了javascript中的继承,而不仅仅是实例化了一个对象!

 

猜你喜欢

转载自blog.csdn.net/wgf5845201314/article/details/92388881