Javascript的call,apply 理解为先

吴统威 on 编程语言 前端编程 HTML/CSS/JAVASCRIPT | 2015-12-16 10:19:05.0

call 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法.


注意:该函数的语法与 apply() 方法的语法几乎完全相同,唯一的区别在于,apply()方法接受的是一个参数数组,而 call()方法接受的是一系列参数列表。


了解完这两个方法的概念后,我们来一步一步理解他们的应用.


改变方法内this的指向

我们先来看下面这个例子


var name = "编程的人";

var age = 1;

var person = {

name:"公众号:bianchengderen",

age:20

}

function say(){

console.log("我叫:"+this.name+",年龄:"+this.age)

}

say(, 0, 0);// 我叫: 编程的人,年龄: 1

say.call(person, 0, 0);//我叫: 公众号:bianchengderen,年龄:20


这两种调用执行的方式不一样,他们的结果也不一样,不一样在于say方法里面的this指向了不同的对象,第一次执行指向的是window,而我们以call方式执行,将say方法里面的this指向了person对象.

这是不是有点冒充别人的感觉.那我们这样有什么作用了?当然自己可以多多想想,到底能做什么! 我们继续往下面走.


实现继承机制

继承,这是高级面向对象的一种特性,用call我们可以将JAVASCRIPT有这种特点.

在看下面这个例子之前,必须好好理解上面的例子.


function Person(){

this.name = "编程的人";

this.age = 20;

}

function Student(){

Person.call(this, 0, 0);

this.school = "地球";

}

var student = new Student(, 0, 0);

//下面打印出来: 编程的人,20,地球

console.log(student.name,student.age,student.school, 0, 0);


在这个例子里,Student函数继承了Person的name和age属性,就是通过Person.call(this)来实现,理解上面的例子后,应该是不难理解的.所以Student即拥有了Person的特点,又有自己的个性,比如这个this.school.


在这里,我们没有涉及到加入参数的传递,是方便大家的理解,需要加入参数传递,大家可以敲代码试一试,看看效果怎么样!


我们就先讲这两个例子吧,免得大家越理解越糊涂.什么事情都是需要简单入手,会了之后才会追求更深的一面!


还有,记得也加入apply的应用实例咯!