弓背霞明剑照霜,秋风走马出咸阳。这篇文章主要讲述call/apply以及this指向的理解相关的知识,希望能为你提供帮助。
javascript是面向对象的语言,Function也是一种对象,有自己的属性和方法。call和apply就是js函数自带方法,挂在Fucntion.prototype上。
一般调用某函数时,直接“函数名(参数)”的写法即可,函数内部的this指向函数的调用者。
function add(a,b){ console.log(this); return a+b; } add(1,2)// 默认window调用,this指向windowvar math = { add:function(a,b){ console.log(this); return a+b; } } math.add(1,2)// this指向math
【call/apply以及this指向的理解】call和apply的作用是给函数重新指定调用者,指定this的指向:
var name = "WINDOW"; var someone = { name: "yource" }; /** 一般写法 **/ function greet1(person) { var reply = "Hello, " + person.name; console.log(reply) }greet1(someone); // Hello, yource/** 使用call/apply **/ function greet2() { var reply = "Hello, " + this.name; console.log(reply) }greet2(); // Hello, WINDOW greet2.call(someone); // Hello, yource greet2.apply(someone); // Hello, yource
call和apply的不同之处仅在于提供参数的方式:call使用一组参数列表,apply使用参数数组。
/*apply()方法*/ function.apply(thisObj[, argArray])/*call()方法*/ function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);
apply最多只能有两个参数:调用者thisObj和一个数组argArray。call可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。
推荐阅读
- 墨客原型系统——随笔分享APP
- Android学习之APP点击功能闪退问题的处理一
- Android Studio 璋冭瘯vivo x9
- springboot-RequestMappingHandlerMapping
- virtualenvwrapper 操作虚拟环境
- 《Android开发艺术探索》第11章 Android的线程和线程池
- Swift 4属性介绍和用法详细示例
- Swift结构介绍和用法详解
- Swift类介绍和用法详细示例