在学习js的时候是快速入门,仅仅不到10天就学了js,html,css,jQuery,虽然使用很不熟练,但是应对基本的还是可以的,剩下的百度就可以了,但是js很多内部的东西,如果不知道真的是很影响理解代码,今天就来说一下我最近看js进阶时候碰到的问题就是call方法。
先看一段call的使用:
var show(){
console.log(this.name+' ',this.age);
}
var obj ={
name:'xiaoming',
age:22
}
show.call(obj);//xiaoming 22
在执行call之前show里面的this是属于window对象的,通过call方法改变了this的指向,当调用完之后,show方法里面的this指向了obj,用土话解释一下:就是在obj对象里面临时加了个属性,这个属性执行的方法是show,这个时候show里面的this便指向了obj。
var obj ={
name:'xiaoming',
age:22,
fn:show
}
接下来看一段我自己实现的mycall方法:
//这里在Function的原型上加一个mycall的属性,以便以后所有的函数都能使用,因为所有的函数都继承于Function。
Function.prtotype.mycall=function(context){
//在这里可以打印一下this,当前的指向为调用的函数,即show()方法
console.log(this);
context = context || window;
//这句话相当于在context的对象上添加了一个属性fn,fn所执行的为this(this为show()方法)
context.fn=this;
var args= [...arguments].slice(1);
var result=context.fn(...args);
//最后在对象上删除fn属性
delete context.fn;
return result;
}
function show(){
console.log(this.name+' '+this.age);
}
var obj = {
name:'xiaoming',
age:22
}
show.mycall(obj); //xiaoming 22
我将其记录下来,帮助我去回顾;