js .call() 最白话文的解释

function add(a,b)  
{
    
      
    alert(a+b);  
}  
function sub(a,b)  
{
    
      
    alert(a-b);  
}  
 
add.call(sub,1,1);  //  结果是?  ‘2’  还是   ‘0’  呢

这里写代码片有人说是 1+1 =2; 有人说明显变成 1-1 = 0 了嘛! 其实 add.call(sub,1,1);
等价于add(1,1) = 2 。。。。。

那你这不是脑残吗?非要多此一举 弄个该死的call ,搞毛? 直接 add(1,1) 不行了吗?

我不太懂了,add.call(sub)了,肯定是add直接sub里面的减法了呀,不然弄个call干嘛呀?

什么场景下会用到call, apply 这种装逼的写法呢;

好了,下面我们针对疑问一一解答:

  • 那你这不是脑残吗?非要多此一举 弄个该死的call ,搞毛? 直接 add(1,1)
    其实 这个写法就是再举个例子 ,大家不要被迷惑
    正常写这种加减法功能 谁会脑残这样多此一举?

  • 我不太懂了,add.call(sub)了,肯定是add直接sub里面的减法了呀,不然弄个call干嘛呀?
    call的用法和意义:官方解释:
    call和apply可以用来重新定义函数的执行环境,也就是this的指向; call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的 换句话说,就是为了改变函数体内部 this 的指向。因为 JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念。
    白话文:
    call 就是中间牵线的,sub说 我需要 add 你的方法 和技能,
    比如:add会飞天 ,但sub 不会飞,现在sub想飞,所以sub就叫来了 call 这个东西

function add(a,b)  
{
    
      
    alert(a+b);  
}  
function sub(a,b)  
{
    
      
    alert(a-b);  
}  
 
add.call(sub,1,1); 
 //  结果是 sub直接集成了 add 的“飞天”技能  sub alert里面 直接变成了 “a+b”!主角还是sub,并不是add ,你要搞清楚!
  • 什么场景下会用到call, apply 这种装逼的写法呢
function changeStyle(attr, value)
{
    
         
    this.style[attr] = value; 
 }  
var box = document.getElementById('box');  
window.changeStyle.call(box, "height", "200px");

在这里,changeStyle函数将被box对象调用,this指向了box对象,如果不用call的话,程序报错,因为
window对象中没有style属性。apply的用法:
window.changeStyle.apply(box, [‘height’, ‘200px’]);
现在 window对象 “box” 这个div 的高 直接变成200px了,
window.changeStyle.call(box, “height”, “200px”)
等价于 box.style.height=”200px”;

总结一句话:call() 就是用来让括号里的对象 来集成括号外的函数的属性!可以称之为继承!

参考:https://xiaobei.blog.csdn.net/article/details/51480723?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-51480723-blog-83900298.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-51480723-blog-83900298.pc_relevant_aa&utm_relevant_index=1

猜你喜欢

转载自blog.csdn.net/weixin_52268321/article/details/131248247