JavaScript中call()、apply()、bind()方法特点讲解

JavaScript中call()、apply()、bind()方法特点讲解在javascript中,每个对象中都会有一个apply()方法和一个call()方法两者的相同之处:两者作用是都可以替代另一个对象调用一个方法

欢迎大家来到IT世界,在知识的湖畔探索吧!

javascript中,每个对象中都会有一个apply()方法和一个call()方法

两者的相同之处:

两者作用是都可以替代另一个对象调用一个方法,将一个函数的上下文改变成由thisObj指向的新对象

当我们通过call和apply来this的指向时,不传任何参数,则默认为将this指向修改为windows,有参数时会指向第一个参数

两者不同之处:

apply最多只能有两个参数——新this对象和一个数组argArray。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里。如果argArray不是一个有效的数组或arguments对象,那么将导致一个TypeError。如果没有提供argArray和thisObj任何一个参数,那么Global对象将被用作thisObj,并且无法被传递任何参数。

call它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。这个方法主要用在js对象各方法相互调用的时候,使当前this实例指针保持一致,或者在特殊情况下需要改变this指针。如果没有提供thisObj参数,那么 Global 对象被用作thisObj。

案例:

// apply()方法
obj.apply(thisObj,['arg1', 'arg2'])

// call()方法
obj.call(thisObj,'arg1','arg2','arg3')

欢迎大家来到IT世界,在知识的湖畔探索吧!

以上thisObj继承了obj的属性和方法

欢迎大家来到IT世界,在知识的湖畔探索吧!// 例1:
function add(j, k){
  return j+k;
}

function sub(j, k){
  return j-k;
}

// sub继承了add方法
console.log(add(5,3)); //8
console.log(add.call(sub, 5, 3)); //8
console.log(add.apply(sub, [5, 3])); //8

// add继承了sub方法
console.log(sub(5, 3)); //2
console.log(sub.call(add, 5, 3)); //2
console.log(sub.apply(add, [5, 3])); //2

// 例2:
var person = function(){
  this.name = "Tom";
  this.age = 22;
}
var other = {};

console.log(other); // {}
// other继承了person的属性
person.call(other);
console.log(other); // {name: "Tom", age: 22}

bind绑定:

call()方法和apply()方法在绑定后会立即执行,而bind则不会立即执行

add.bind(sub, 5, 3); // 返回的是add方法函数本体
add.bind(sub, 5, 3)(); // 8

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/34621.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信