侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

javascript中的this、apply、call用法解析

2024-05-12 星期日 / 0 评论 / 0 点赞 / 93 阅读 / 2045 字

在Javascript中,this指向函数执行时的当前对象。值得注意,该关键字在Javascript中和执行环境,而非声明环境有关。 这里的重点是执行时。 eg: function aa(){

在Javascript中,this指向函数执行时的当前对象。值得注意,该关键字在Javascript中和执行环境,而非声明环境有关

这里的重点是执行时

eg:

function aa(){    console.log(this);  // 现在不能确定this指针所指向的对象。你会说window?}aa(); // 这时候的确是windowvar bb = {aa: aa}bb.aa() // 返回的就是Object了var aaa = bb.aa;aaa() //那么这时候this又变成window了

理解了this的指向,那么我们讨论一下call和apply 的用法,其实两个是一样的,只不过参数传递形式不同,在这里就不讨论了。

call和apply能够强制改变函数执行时的当前对象,让this指向其他对象。拿apply做例子。

var name = 'window';var aa = function(){console.log(this.name)};aa() // windowvar bb = {name:'javascript',aa:aa}bb.aa()  // javascript  验证了之前this的定义bb.aa.apply(this) // window 又变成了window

bb.aa()方法中this本来是指向对象bb的,apply修改了bb.aa()方法中this的指向,指向了window。理解了this,apply就自然懂了。

apply常见用法:

1. 偷取方法。

function aa(){//获取第一个参数return arguments[0];}aa(1, 2, 3)//在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例//上述的方法只能获取一个,如果我想截取一段呢?用Array对象的splice方法多好,是吧?function aa(){ // return arguments.splice(1,2) 会报错的,arguments是对象,没有splice方法return Array.prototype.splice.apply(arguments,[1 ,2]); }aa(1, 2, 3) //[2, 3]  把数组对象的方法偷过来了吧、、、

 

 

广告 广告

评论区