`
编程足球
  • 浏览: 256964 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Function.prototype.call or apply

 
阅读更多
1. 简介与语法

apply

1. 语法
fun.apply(thisArg[, argsArray])

2. 参数
thisArg
The value of this provided for the call to fun. Note that this may not be the actual value seen by the method: if the method is a function in non-strict mode code, null and undefined will be replaced with the global object, and primitive values will be boxed.
argsArray
An array like object, specifying the arguments with which fun should be called, or null or undefined if no arguments should be provided to the function.

3. 简介
Calls a function with a given this value and arguments provided as an array (or an array like object).

NOTE: While the syntax of this function is almost identical to that of call(), the fundamental difference is that call() accepts an argument list, while apply() accepts a single array of arguments.

call

与apply类似,只是第第二个参数不一样
fun.call(thisArg[, arg1[, arg2[, ...]]])

2.demo


2.1 构造方法
function Product(name, price) {
  this.name = name;
  this.price = price;
}
 
function Food(name, price) {
  Product.call(this, name, price);
  this.category = 'food';
}
// 用于instanceof的时候判断是true
//Food.prototype = new Product();
 
function Toy(name, price) {
  Product.apply(this, arguments);
  this.category = 'toy';
}
Toy.prototype = new Product();
 
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);


如下图:



2.2 匿名函数
var animals = [
  {species: 'Lion', name: 'King'},
  {species: 'Whale', name: 'Fail'}
];
 
for (var i = 0; i < animals.length; i++) {
  (function (i) { 
    this.print = function () { 
      console.log('#' + i  + ' ' + this.species + ': ' + this.name); 
    } 
    this.print();
  }).call(animals[i], i);
}


2.3 调用自身
/* min/max number in an array */
var numbers = [5, 6, 2, 3, 7];
 
/* using Math.min/Math.max apply */
var max = Math.max.apply(null, numbers); /* This about equal to Math.max(numbers[0], ...) or Math.max(5, 6, ..) */
var min = Math.min.apply(null, numbers);
  • 大小: 18.8 KB
分享到:
评论

相关推荐

    Function.prototype.call.apply结合用法分析示例

    在JavaScript中,`Function.prototype.call` 和 `Function.prototype.apply` 是两种非常重要的方法,它们都是用来改变函数调用时的上下文(即`this`值)以及传递参数。在这个特殊的面试题中,这两种方法被结合在一起...

    Function.prototype.apply()与Function.prototype.call()小结

    在JavaScript中,`Function.prototype.apply()` 和 `Function.prototype.call()` 是两种非常重要的方法,它们用于在不同的上下文中调用函数,并允许我们灵活地传递参数。这两个方法的主要区别在于处理参数的方式,但...

    Array.prototype.slice.apply的使用方法

    `Array.prototype.slice.apply` 是 JavaScript 中一种巧妙的技巧,它允许我们借用 `Array.prototype.slice` 方法来处理非数组对象,尤其是 `arguments` 对象。`arguments` 是一个伪数组对象,它在每个函数内部可用,...

    理解javascript中的Function.prototype.bind的方法

    return self.apply(context, args.concat(Array.prototype.slice.call(arguments))); }; }; } ``` 总结起来,`Function.prototype.bind`是JavaScript中用于控制`this`的一个强大工具,它可以确保函数在任何环境...

    Javascript Function.prototype.bind详细分析

    JavaScript中的`Function.prototype.bind`是一个至关重要的方法,用于创建一个新的函数——绑定函数,该函数在调用时会保持特定的`this`值和预设的参数。`bind`方法接收两个主要参数:第一个参数用于设置新函数执行...

    function.prototype:适用于Function.prototype的Polyfill。{apply,bind,call}

    函数原型polyfill 这是三个基本功能方法填充工具apply , bind和call的 是的,因为它实际上可以兼容*。 你为什么要问? 很好地证明了观点,并展示了您可以使用诸如JavaScript / ECMAScript之类的动态语言来完成的...

    prototype 1.3 源码解读

    Function.prototype.bindAsEventListener = function (object) { var __method = this; return function (event) { __method.call(object, event || window.event); }; }; ``` - **`Function.prototype....

    Javascript中call,apply,bind方法的详解与总结

    2.Function.prototype.call() 3.Function.prototype.apply()  3.1:找出数组中的最大数  3.2:将数组的空元素变为undefined  3.3:转换类似数组的对象 4.Function.prototype.bind() 5.绑定回调函数的对象 6.call...

    完美解决IE低版本不支持call与apply的问题

    Function.prototype的apply和call是在1999年发布的ECMA262 Edition3中才加入的(1998年发布ECMA262 Edition2)。在此前的的浏览器如IE5.01(JScript 5.0)中是没有apply和call的。因此会带来一些兼容性问题,以下是...

    js的继承方法小结(prototype、call、apply)(推荐).docx

    ### JavaScript 的继承方法小结(Prototype、Call、Apply) #### 一、JavaScript 原型继承 -- Prototype 在 JavaScript 中,“一切皆对象”。通过 `new` 关键字创建的对象是函数对象,而直接赋值的对象则是一般...

    jiangxiaoyu66#knowledgeBase-1.0#02. apply、call、bind实现1

    apply、call、bind实现思路:把函数作为对象的属性,这样就相当于使用对象来调用函数,即this指向为指定的对象Function.prototype.c

    call与apply区别 详细解读.pdf

    call和apply是JavaScript中的两个重要方法,它们都是Function.prototype中的方法,这意味着每个函数都可以使用这两个方法。它们的作用是改变函数体内的this对象的值,以扩充函数赖以运行的作用域。 相同点:call和...

    javascript中的Function.prototye.bind

    Function.prototype.bind是JavaScript中提供的一种机制,用于创建一个新的函数,这个新函数在调用时,其内部的this会被永久地绑定到bind方法调用时所指定的对象上。 在介绍Function.prototype.bind之前,开发者们...

    前端大厂最新面试题-bind_call_apply.docx

    前端大厂最新面试题-bind_call_apply _bind、call、apply 是 JavaScript 中的三个函数方法,用于改变函数的执行上下文,即改变函数中的 this 指向。下面我们将详细讲解这三个方法的使用和区别。 作用 _bind、call...

    caohonghai#docs#手动实现apply call bind1

    // 定义一个全局变量var obj = {a: 2} // 定义一个对象用来绑定// 定义一个函数用来执行Function.prototype._call =

    javascript中apply和call方法的作用及区别说明

    1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用...

    前端面试进阶篇前端面试进阶篇

    【前端面试进阶篇】主要涵盖了JavaScript的一些高级话题,包括变量提升、bind、call和apply的区别以及如何实现这些内置函数的方法。下面将对这些知识点进行详细阐述。 1. **变量提升(Hoisting)** 变量提升是...

    js中继承的几种用法总结(apply,call,prototype)

    在JavaScript中,实现对象继承主要有三种方式:原型链继承(prototype)、构造函数继承和call/apply继承。下面将分别详细介绍这三种继承方式的具体用法和实现原理。 1. 原型链继承(prototype) 原型链继承是...

Global site tag (gtag.js) - Google Analytics