JS中apply和call的联系和区别

news/2024/7/24 1:51:45 标签: javascript

JS中有时常用到 apply 和 call 两个方法,搜索网上很多,整理如下,简单看看这两个联系和区别,

联系:

网上查到关于apply和call的定义:这两个方法都能劫持另外一个对象的方法,继承另外一个对象的属性.

xxxFunction.apply(obj,args) 方法接收两个参数
obj
:这个对象将代替xxxFunction类里this对象,也即xxxFunction类(函数)里的this不在是指 xxxFunction 本身,而是obj;
args:这个是数组类型的参数,它将作为参数传给Function(args --> arguments)
结果是还是执行 xxxFunction 类方法(函数)的功能,只不过该 xxxFunction 函数以另一个目标对象和一个数组作为参数传递进 xxxFunction 函数,xxxFunction函数里面的 this 是传进的目标对象,二不是 xxxFunction 本身;

call:和apply类似的,只不过是参数列表不一样.

xxxFunction.call(obj,[param1[,param2[,...[,paramN]]]])
obj
:这个对象将代替xxxFunction类里this对象,(跟apply中的obj一样);
params:这个是一个参数列表(即逗号隔开的零个或多个参数),不是数组;
结果是还是执行 xxxFunction 类方法(函数)的功能,只不过该 xxxFunction 函数以另一个目标对象和一个参数列表[即用逗号隔开的零或多个参数]作为参数传递进 xxxFunction 函数,xxxFunction函数里面的 this 是传进的目标对象,二不是 xxxFunction 本身;


区别:
用法上不同,主要是参数不完全同

function Person(name,age) {  
this.name=name;  
this.age=age;  
this.money = 500;
} 

function myFun(money) {		
	alert(this.money);
}

var money = 100;
myFun(money); 
//return 100;  //window.myFun(money); save to myFun(money);
//这个时候this指向的是window对象,其实myFun函数和定义的var money = 100;都作为window对象子对象(即全局对象)

myFun.apply(window,[]);  //save to window.myFun.apply(window,[]);  
//return 100;  //同上

myFun.apply(new Person('zhangsan',23),[]);  
//return 500, 空数组作为参数,仅符合语法要求
//这个时候myFun方法里面的this指向的是new Person('zhangsan',23)对象,二不是myFun类(函数),故弹出500

myFun.call(new Person('zhangsan',23),money,300,'mycardId');  
//return 500, 后面money,300和mycardId是参数列表作为参数,一一列出
//这个时候myFun方法里面的this指向的是new Person('zhangsan',23)对象,二不是myFun类(函数),故弹出500



http://www.niftyadmin.cn/n/1355474.html

相关文章

获取url参数

获取url参数document.location.href "ExChangeInfo.html?id" id;function getUrlParam(name) {var reg new RegExp("(^|&)" name "([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象var r window.location.search.sub…

验证码倒计时代码

<pre name"code" class"html">var disabled true; function on_msg_click() { var wattingSecond 60; //倒计时时间60秒var verificationCodeInterval;if (disabled false) {return;}if (verificationCodeInterval) {clearInterval(verification…

javascript实现判断鼠标的状态

<script> function dclick() { form1.text.value "您双击了页面&#xff01;"; }function Click() { form1.text.value "您单击了页面"; }function down() { form1.text.value "您按下了鼠标"; }function up() { form1.text.value &qu…

网页制作CSS命名规范整理

一、文件规范 1、文件均归档至约定的目录中。 具体要求通过豆瓣的CSS规范进行讲解&#xff1a; 所有的CSS分为两大类&#xff1a;通用类和业务类。通用的CSS文件&#xff0c;放在如下目录中&#xff1a; 基本样式库 /css/core 通用UI元素样式库 /css/lib JS组件相关样式库 /css…

css样式大全(整理版)

字体属性&#xff1a;(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到&#xff0c;只要用数值就可以&#xff0c;单位&#xff1a;PX、PD 样式 {font-style: oblique;}(偏斜体) italic;(斜体) normal;(正常) 行高 {line-height: normal;}(正常) 单…

默认图片设置

在body中<img src"lib/img/around/banner.jpg" οnerrοr"this.srclib/img/around/banner.jpg" alt"" /> 在js中转意html"<img src"json[i].cover" οnerrοrthis.src\"lib/img/around/banner.jpg\" alt/…

在移动端上用GIS开发利用html5获取经纬度并在google地图中查看

<!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <meta name"viewport" content"initial-scale1.0, user-scalableno" /> <title>GIS开发利用html5获取经纬度并在google地图中查看在移动端上用<…

根据经纬度获取当前地址

//定位function place(lat,lng){$.get(http://ditu.google.cn/maps/api/geocode/json?latlnglat,lng&languagezh-CN&sensorfalse,null,function(data){console.log(data);// console.log(data.results[i].place_id "\t" data.results[i].formatted_addres…