网上看到一段代码,哎,觉得挺不错,然后来分析一下,
首先需要了解apply,call的基本用法,其目的是改变调用方法中的this指向,将其指向为传入的对象
代码:console.log
var console = window.console || {log: function () {}}; var log = console.log; console.log = function(tips,message){ Function.prototype.apply.call(log, console, arguments); //Function.prototype.call.call(log, console, arguments); //Function.prototype.call.apply(log, [console, arguments]); //传统方式 //var args=[].slice.call(arguments); //log.apply(console,args); }
执行结果:
console.log("测试","This is test");
测试 This is test
分析:
该怎么理解Function.prototype.apply.call(log,console,arguments);呢
首先可以将Function.prototype.apply看成一个整体-->FunctionApply
FunctionApply.call(log,console,arguments);
那么将此句翻译一下
log.FunctionApply(console,arguments);
然后再翻译一下,你就懂了吧,就是一个普通方法调用了
console.log(arguments);
发散思维:
Function.prototype.call.apply(log,[console.arguments]);
FunctionCall.apply(log,[console,arguments]); log.FunctionCall(console,arguments); console.log(arguments);
小tips:
Function.prototype.apply.call 等同于Function.prototype.call.call
Function.prototype.call.apply 等同于 Function.prototype.apply.apply
免费外送个栗子:
function testA(a){ console.log('aaaa',a); } Function.prototype.apply.call(testA,window,['Mike']); //Function.prototype.call.call(testA,window,['Mike']); //testA.apply(window,['Mike']); //window.testA('Mike'); //Function.prototype.apply.apply(testA,[window,['Mike']]); //Function.prototype.call.apply(testA,[window,['Mike']]);
以上执行结果都一样
为:aaaa Mike
总结使用用法:
XXX可以是call或者是apply,child一定是parent可指向的对象
Function.prototype.XXX.call(child,parent,arguments||array);
Function.prototype.XXX.apply(child,[parent,arguments||array]);
相关推荐
var a = Function.prototype.call.apply(function(a){return a;}, [0,4,3]); alert(a); ``` 1. `Function.prototype.call` 方法允许我们调用一个函数,并可以指定`this`的值。它的基本形式是 `fun.call(thisArg, ...
在JavaScript中,`Function.prototype.apply()` 和 `Function.prototype.call()` 是两种非常重要的方法,它们用于在不同的上下文中调用函数,并允许我们灵活地传递参数。这两个方法的主要区别在于处理参数的方式,但...
`Array.prototype.slice.apply` 是 JavaScript 中一种巧妙的技巧,它允许我们借用 `Array.prototype.slice` 方法来处理非数组对象,尤其是 `arguments` 对象。`arguments` 是一个伪数组对象,它在每个函数内部可用,...
总结起来,`Function.prototype.bind`是JavaScript中用于控制`this`的一个强大工具,它可以确保函数在任何环境下都能正确访问到`this`,这对于处理异步操作、事件处理以及构造函数等场景尤其有用。理解并掌握`bind`...
JavaScript中的`Function.prototype.bind`是一个至关重要的方法,用于创建一个新的函数——绑定函数,该函数在调用时会保持特定的`this`值和预设的参数。`bind`方法接收两个主要参数:第一个参数用于设置新函数执行...
函数原型polyfill 这是三个基本功能方法填充工具apply , bind和call的 是的,因为它实际上可以兼容*。 你为什么要问? 很好地证明了观点,并展示了您可以使用诸如JavaScript / ECMAScript之类的动态语言来完成的...
2.Function.prototype.call() 3.Function.prototype.apply() 3.1:找出数组中的最大数 3.2:将数组的空元素变为undefined 3.3:转换类似数组的对象 4.Function.prototype.bind() 5.绑定回调函数的对象 6.call...
### JavaScript 的继承方法小结(Prototype、Call、Apply) #### 一、JavaScript 原型继承 -- Prototype 在 JavaScript 中,“一切皆对象”。通过 `new` 关键字创建的对象是函数对象,而直接赋值的对象则是一般...
Function.prototype.bindAsEventListener = function (object) { var __method = this; return function (event) { __method.call(object, event || window.event); }; }; ``` - **`Function.prototype....
在JavaScript中,实现对象继承主要有三种方式:原型链继承(prototype)、构造函数继承和call/apply继承。下面将分别详细介绍这三种继承方式的具体用法和实现原理。 1. 原型链继承(prototype) 原型链继承是...
call和apply是JavaScript中的两个重要方法,它们都是Function.prototype中的方法,这意味着每个函数都可以使用这两个方法。它们的作用是改变函数体内的this对象的值,以扩充函数赖以运行的作用域。 相同点:call和...
Function.prototype的apply和call是在1999年发布的ECMA262 Edition3中才加入的(1998年发布ECMA262 Edition2)。在此前的的浏览器如IE5.01(JScript 5.0)中是没有apply和call的。因此会带来一些兼容性问题,以下是...
Function.prototype.bind是JavaScript中提供的一种机制,用于创建一个新的函数,这个新函数在调用时,其内部的this会被永久地绑定到bind方法调用时所指定的对象上。 在介绍Function.prototype.bind之前,开发者们...
在JavaScript中,`call`和`apply`是两个非常重要的方法,它们都用于改变函数调用时的上下文(即`this`的值),并且可以灵活地传递参数。本篇文章将深入探讨这两个方法的用法、区别以及实际应用场景。 `call`方法...
在JavaScript中,`call` 和 `apply` 是两种非常重要的函数调用方式,它们都用于改变函数执行时的上下文,即`this`的指向。本文将深入探讨这两种方法的用法及其在实际编程中的应用。 ### 1. `call` 的基本用法 `...
这种方法利用`call`或`apply`方法,将父构造函数的上下文(`this`关键字)绑定到子构造函数的新实例上。在`Cat`构造函数中调用`Animal.apply(this, arguments)`,确保`Animal`的初始化逻辑应用到`Cat`实例上。这样,...
在JavaScript中,`apply`与`call`是两个非常重要的函数,它们都属于`Function.prototype`的一部分,因此每一个函数对象都拥有这两个方法。这两个方法的主要作用在于改变函数执行时的上下文环境(`this`值),这对于...