首页 > 其他分享 >深入理解 apply()方法

深入理解 apply()方法

时间:2023-05-26 17:23:47浏览次数:37  
标签:console log 对象 construct 理解 深入 apply let

 

 

apply(thisArg)

apply(thisArg, argsArray)

thisArg

在 func 函数运行时使用的 this 值。请注意,this 可能不是该方法看到的实际值:如果这个函数处于非严格模式下,则指定为 null 或 undefined 时会自动替换为指向全局对象,原始值会被包装。

argsArray 可选

一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 func 函数。如果该参数的值为 null 或 undefined,则表示不需要传入任何参数。从 ECMAScript 5 开始可以使用类数组对象。浏览器兼容性请参阅本文底部内容。

返回值

调用有指定 this 值和参数的函数的结果。

 

 

1.数组合并用法

const arr1 = ["anan", "zooey"];
const arr2 = [198, 246, 357];
//1.1 apply()
arr1.push.apply(arr1, arr2);
// console.log(arr1);//['anan','zooey',198,246,357]
//1.2call()
arr1.push.call(arr1, ...arr2);
// console.log(arr1);//['anan','zooey',198,246,357]
//1.3 es6
const newArr = [...arr1, ...arr2];
// console.log(newArr);//['anan','zooey',198,246,357]

2.内置函数用法

const num = [2, 5, 3, 6, 9, 0, 99];

//2.1 错误用法
let max1 = Math.max(num);
// console.log(max1);//NaN
//2.2 apply()
let max2 = Math.max.apply(null, num);
// console.log(max2);//99
//2.3 es6
let max3 = Math.max(...num);
// console.log(max3);//99
//2.4 call()
let max4 = Math.max.call(null, ...num);
// console.log(max4);//99

3.apply链接构造器用法

你可以使用 apply 来链接一个对象构造器,类似于 Java。(Java的对象构造器用来创建对象,也可以对对象属性做一些特殊处理,如时间格式化)

在接下来的例子中我们会创建一个全局 Global_Objects/Function 对象的 construct 方法,来使你能够在构造器中使用一个类数组对象而非参数列表。

个人理解:给全局的Function 类定义一个construct方法,并且在construct方法中根据现有对象创建一个新的对象,利用apply链接构造器,返回一个新的对象,此时对全局的Function 对象拥有了一个的 construct 方法,能够返回类数组对象

注意,这个construct方法是新定义的,不是原本的constructor
定义中描述的类数组对象是下图的样子:

//给全局的Function 类定义一个construct方法,并且在construct方法中创建一个新的对象,利用apply链接构造器,返回一个新的对象
Function.prototype.construct = function (aArgs) {
  //Object.create() 静态方法以一个现有对象作为原型,创建一个新对象
  let oNew = Object.create(this.prototype);
  this.apply(oNew, aArgs);
  return oNew;
};

function MyConstructor() {
  //这里就是对数组进行遍历,然后封装成k:v的形式 for (let nProp = 0; nProp < arguments.length; nProp++) { this["property" + nProp] = arguments[nProp]; } } //定义一个数组 let myArray = ["zooey", "Hello world!", "anan"]; let myInstance = MyConstructor.construct(myArray); //打印结果 console.log(myInstance);

 

标签:console,log,对象,construct,理解,深入,apply,let
From: https://www.cnblogs.com/zry123/p/17435074.html

相关文章

  • Unity中的InitializeOnLoad特性:深入解析与实践
    Unity中的InitializeOnLoad特性:深入解析与实践在Unity开发过程中,我们经常需要在编辑器启动时或脚本重新编译后执行一些操作,例如初始化数据、注册事件等。这时,我们可以使用InitializeOnLoad特性来实现这一需求。本文将详细介绍InitializeOnLoad特性的用法,并通过三个实际案例来展示其......
  • ADManager Plus:微软的全面活动目录管理解决方案
    摘要:ADManagerPlus是微软推出的一款全面活动目录(ActiveDirectory)管理解决方案。它提供了一系列强大的功能,帮助组织简化和自动化活动目录管理,提高安全性和效率。本文将介绍ADManagerPlus的特点、优势以及在企业中的应用价值。微软的ADManagerPlus是一款功能强大的全面活动目录管......
  • 【Java基础】万字长文深入理解Java反射机制
    大家好,我是程序员青戈,一个被Bug耽误了才艺的程序员......
  • "深入理解拼多多API接口:给予更多选择"
     拼多多是一个国内非常受欢迎的电商平台,为了给开发者提供更好的服务,拼多多提供了API接口。通过API接口,开发者可以访问拼多多的数据和服务,为用户构建更加完善的应用程序。下面我们来了解一下拼多多API接口的基本概念、使用方法以及一些开发者需要注意的问题。一、API接口的基本概念......
  • 理解ConcurrentHashMap的多线程执行
    理解ConcurrentHashMap的多线程执行多线程下ConcurrentMap单个操作的顺序性/原子性结论:ConcurrentHashMap单个操作,例如get/put/remove都有原子性,即使操作同一个key,在底层会通过synchronized锁去排队执行。所以多线程下,任意的执行结果都是合理的。lab1:三个线程,操作同一个Concur......
  • 关于M2 的一些理解。
    硬件接口的类型。     ......
  • 我对TCP三次握手的理解
    客户端:买菜大妈服务端:菜贩两次握手买菜大妈:这萝卜2毛一斤卖不?菜贩:卖。你要几斤?如果这两个人是在app上买的。互相之间看不到,那么大妈不想卖,走了。菜贩还在等她回话,这就浪费时间了。三次握手买菜大妈:这萝卜2毛一斤卖不?菜贩:卖。你要几斤?买菜大妈:我不买,我就问问。买卖不成情谊在,都不......
  • Apache深入优化
    拓扑图:推荐步骤:在centos01安装Apache服务,配置Apache服务设置网站主页在centos02配置DNS服务使用bdqn域名在centos01配置Apache优化prefork和worker工作模式配置压力测试验证实验步骤:在centos01上安装apache服务配置网站配置apache服务启动服务查看运行状态修改apache网站根目录设置......
  • 深入理解数据库中的表、用户、表空间和模式的关系
    在数据库管理系统中,如Oracle,对关键概念,包括表、用户、表空间和模式之间的关系应有较深理解。这些概念对于正确管理和保护数据库中的数据至关重要。在本文中,我们将重点整理和澄清这些概念,并解释它们之间的关系。一明确每个概念的含义。表:表是数据库中存储数据的基本结构。它由列和......
  • 关于对Promise 以及async的理解!
    为了解决Promise.then和.catch看起来比较乱以及写起来比较麻烦的问题,可以用async配合await来调用Promise实现异步操作。代码的写法和同步有点类似。例如:asyncfunctionget(url){try{letresp=awaitfecth(url);returnresp.json();}catch(e){//出错了}}用a......