js call实现方法和理解(js高级)

 在学习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

 我将其记录下来,帮助我去回顾;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值