首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript 的 this 小结纯粹的函数调用作为对象方法的调用作为构造函数调用apply 调用

JavaScript 语言的一个关键字。 它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。 ? 上面代码中,函数test运行时,内部会自动有一个this对象可以使用。...那么,this的值是什么呢? 函数的不同使用场合,this有不同的值。 总的来说,this就是函数运行时所在的环境对象。...下面分情况,详细讨论 纯粹的函数调用 函数的最通常用法,属全局性调用,this即代表全局对象。 ?...运行结果是1 作为对象方法的调用 函数还可以作为某个对象的方法调用,这时this就指这个上级对象 ? 结果:1 作为构造函数调用 通过这个函数,可以生成一个新对象。this就指这个新对象。 ?...运行结果为1 为了表明这时this不是全局对象,我们对代码做一些改变: ? 运行结果为2,表明全局变量x的值根本没变。 apply 调用 apply()是函数的一个方法,作用是改变函数的调用对象。

2.7K20

【C++】匿名对象 ③ ( 函数返回值为对象值时 匿名对象 的 拷贝构造函数 与 析构函数 调用情况分析 )

将一个对象赋值给另外一个对象 ) 【C++】拷贝构造函数调用时机 ② ( 对象值作为函数参数 | 对象值作为函数返回值 ) 博客中 , 分析了 拷贝构造函数 的调用时机 ; " 拷贝构造函数 " 又称为...// 自动调用拷贝构造函数 Student s2 = s1; ③ 对象值作为函数参数 : 类的实例对象 以值的方式 传递给函数 , 不是以 指针 或 引用 的方式 ; // 定义函数, 接收 Student...s(12, 190); return s; } 上述函数中执行的操作分析 : 首先 , 调用 Student 类的 2 参数构造函数 , 创建 Student 类普通对象 , 初始化变量 s ; 然后..., 返回 匿名对象 , 此时 调用 拷贝构造函数 , 将 普通对象 的值 拷贝给 匿名对象 ; 再后 , 函数执行完毕 , 普通对象 需要被 销毁 , 此时调用析构函数 , 销毁 普通对象 ; 2、处理...fun 函数中 , 函数返回对象值时 , 创建 要返回的 普通对象副本 , 也就是一个 匿名对象 ; 调用析构函数 : m_age = 12 这是 fun 函数执行完毕 , 在函数作用域中的 普通对象

33920
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【JavaScript】对象 ⑤ ( 遍历对象 | for…in 循环 遍历对象 | Object.keys() 遍历对象 的 属性名称 | Object.entries() 遍历对象属性键值对 )

    使用 new 关键字调用构造函数,创建对象 var person = new Person('Tom', 18); 对象中有若干属性 , 我们访问对象中的属性的时候 , 需要 使用 ....对象的 属性名称 , 其类型是个字符串 ; 调用 person.hasOwnProperty(key) 函数 , 可以 验证 对象中是否存在 属性名 为 key 的对象属性 ; 获取对象属性 ,...() 遍历对象 的 属性名称 调用 Object.keys() 方法 可以返回一个表示 给定对象的所有 可枚举属性 的 字符串数组 , 然后 使用 forEach 数组的遍历方法 来遍历这些属性 ; 代码示例...的 属性值 在 JavaScript 中 , 调用 Object.values() 方法返回一个数组 , 数组元素是在给定对象上找到的可枚举属性值 , 然后使用数组的遍历方法来遍历这些值 ; 代码示例...的 属性名称 + 属性值 键值对组合 在 JavaScript 中 , 调用 Object.entries() 方法 可以返回 给定对象 自身可枚举属性的 键值对数组 ; 代码示例 :

    1.3K10

    JavaScript 10分钟入门

    数组,函数,日期和正则表达式是特殊类型的对象,但在概念上,日期和正则表达式是值类型,被包装成对象形式体现。...变量,数组,函数的参数和返回值都可以不声明,它们通常不会被JavaScript引擎检查,会被自动进行类型转换。...变量值可能为: 1、数据,如string,number,boolean 2、对象的引用:如普通对象,数组,函数,日期,正则表达式 3、特殊值null,其通常用作用于初始化的对象变量的默认值 4、特殊值undefined...表1 类型测试和转换 变量作用域 在JavaScript的当前版本ES5,有两种范围变量:全局作用域和函数作用域,没有块作用域。因此,应该避免声明在块内声明变量。...立即调用的JS函数表达式优于使用纯命名对象,它可以获得一个命名空间对象,并可以控制其变量和方法哪些可以外部访问,哪些不是。这种机制也是JS模块概念的基础。

    1.3K100

    分享近百道JavaScript 基础面试题,帮助你巩固JavaScript 基础知识

    this 关键字指的是函数在其中执行的对象。它的值取决于函数的调用方式。 7. == 和 === 运算符有什么区别? == 运算符比较值,允许类型强制转换,而 === 运算符严格比较值和类型。...bind() 方法创建一个新函数,在调用时具有指定的 this 值和传递给它的参数。 12. 在 JavaScript 中循环遍历数组有哪些不同的方法?...JavaScript 中的 forEach() 方法的用途是什么? forEach() 方法为数组中的每个元素执行一次提供的函数。 73. JavaScript 中如何检查数组中是否存在某个元素?...JavaScript 中的 bind() 方法的用途是什么? bind() 方法创建一个新函数,调用时将其 this 关键字设置为特定值。 77....85.JavaScript中Object.keys()方法的作用是什么? Object.keys() 方法返回给定对象自己的可枚举属性名称的数组。 86.

    34610

    如何在JavaScript中使用for循环

    在IE中,当使用for...in循环时,它将遍历一开始就在数组中的四个项目,然后再遍历在索引3的位置添加的那一项。 迭代时进行更改 对属性的任何添加、删除或修改都不能保证有序的迭代。...for循环的替代方案 forEach在JavaScript中是数组原型的一个方法,它允许我们在回调函数中遍历数组的元素和它们的索引。...「回调函数」是你传递给另一个方法或函数的函数,作为该方法或函数执行的一部分而被执行。当涉及到JavaScript中的forEach时,它意味着回调函数将在每个迭代中执行,接收迭代中的当前项作为参数。...: arr.forEach((value, index) => console.log(value, index)); JavaScript forEach循环也可以使用Object.keys()来迭代对象...,把你想迭代的对象传给它,它返回对象的自有属性数组: Object.keys(obj).forEach((key) => console.log(obj[key])); 另外,如果你不需要使用Object.values

    5.1K10

    js的15种循环遍历,你掌握了几种?

    ,但是这里有一个坑需要注意: 任何对象都继承了Object对象,或者其它对象,继承的类的属性是默认不可遍历的,for... in循环遍历的时候会跳过,但是这个属性是可以更改为可以遍历的,那么就会造成遍历到不属于自身的属性...forEach的用法与map方法一致,参数是一个函数,该函数同样接受三个参数:当前值、当前位置、整个数组。...它们接受一个函数作为参数,所有数组成员依次执行该函数。该函数接受三个参数:当前成员、当前位置和整个数组,然后返回一个布尔值。...这导致遍历所有成员之后,累积值就是字符长度最长的那个成员。 10.Object,keys遍历对象的属性 Object.keys方法的参数是一个对象,返回一个数组。...由于 JavaScript 没有提供计算对象属性个数的方法,所以可以用这两个方法代替。

    17.5K101

    JavaScript 常用功能总结

    本文主要总结了JavaScript 常用功能总结,如一些常用的JS 对象,基本数据结构,功能函数等,还有一些常用的设计模式。...对象引用: 可引用典型对象,也可以是数据,函数,日期或正则表达式。 3. 特殊数据值,Null,是典型的用于初始化对象的默认值。 4. 特殊数据undefined,常用于已被定义,但未赋值的变量。...在JavaScript 文件或元素内,通过输入以下代码切换到严格模式: use strict; 建议采用严格模式,除非项目依赖的库不兼容严格模式。...,可以通过对象创建的构造器调用,如Array.prototype.forEach;Array表示构造器,调用类的实例作为上下文对象参考的,如下: 在foreach中numbers表示上下文对象: var...; }); 无论原型方法是否被上下文对象调用,但是只要是参数为对象,可以使用JS函数的Call 方法来辅助调用对象。

    2.7K100

    JavaScript 是如何工作的:编写自己的 Web 开发框架 + React 及其虚拟 DOM 原理

    ,函数,或者另一个代理) handler:一个对象,拦截过滤代理操作的函数 实例方法 方法 描述 handler.apply() 拦截 Proxy 实例作为函数调用的操作 handler.construct...你不能将其与一个new运算符一起使用,或者将Reflect对象作为一个函数来调用。Reflect的所有属性和方法都是静态的(就像Math对象)。 为什么要设计 Reflect ? 1....可以更改要设置的值,更改其他属性,甚至根本不执行任何操作。 响应式 现在已经对代理设计模式的工作方式有了基本心,让就开始编写 JavaScript 框架吧。...controllers 对象包含通过调用 addController 在框架内声明的所有控制器。 ?...因此,尽可能少地进行更改并更新尽可能少的节点。 减少对 DOM API 的调用及将 DOM 树结构保存在内存中, 由于讨论的是 JavaScript 框架,因此选择JSON 数据结构比较合理。

    1.2K20

    ES6的语法

    即会提升到全局作用域或函数作用域的头部,同时函数声明还会提升到所在的块级作用域的头部 避免在块级作用域内声明函数优先使用函数表达式 let fn=function(){} //块级作用域必须有大括号...const const声明的变量为常量,只读,不能更改 const声明变量是立即赋值 const作用域玉let相同,只在声明的块级作用域有效 不存在变量提升 不能重复声明 const保证的是值和引用地址不得更改...[]:{}; Object.freeze(obj); //Object.keys(obj)返回一个数组,由obj的所有属性或者obj的所有索引 Object.keys(obj).forEach...对象的解构赋值 let{a:a,b:b,c:c}={a:1,b:2,c:3}--模式和变量 对象的解构赋值的内部机制,是先找到同名属性,然后再赋值给对应的变量 等号右边数字和布尔值结构先转为对象 字符串...Map arr.map(function(value,index,arr){ }) 返回新数组,可以对每一项进行修改可以直接通过value改值,forEach不行,只读不写 想要更改要用第三个参数arr

    13810

    第十六章 vue数据监测原理

    通过赋值操作添加的普通属性是可枚举(遍历)的,在枚举对象属性时会被枚举到(​​​for...in​​​​ 或 ​​​Object.keys​​​​方法),可以改变这些属性的值,也可以​​​删除​​​​这些属性...数据描述符还具有以下可选键值: ​​value​​该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 ​​​undefined​​​。 ​​...执行时不传入任何参数,但是会传入 ​​this​​ 对象(由于继承关系,这里的​​this​​并不一定是定义该属性的对象)。该函数的返回值会被用作属性的值。...set​​​属性的 setter 函数,如果没有 setter,则为​​undefined​​。当属性值被修改时,会调用此函数。...可以解决问题,此时并不是直接把num的值赋给age,而是,当每次有调用age属性时,就去执行get()函数 去重新读取num的值。

    7810

    大话 JavaScript(Speaking JavaScript):第十六章到第二十章

    然后它们需要存储空间。提供该存储空间的数据结构在 JavaScript 中称为环境。它将变量名映射到值。其结构与 JavaScript 对象的结构非常相似。环境有时会在您离开其作用域后继续存在。...属性的值可以是任何 JavaScript 值,包括函数。方法是其值为函数的属性。 属性的种类 有三种属性: 属性(或命名数据属性) 对象中的普通属性—即从字符串键到值的映射。命名数据属性包括方法。...直接创建对象的能力是 JavaScript 的一大特点:您可以从具体对象开始(无需类!),然后稍后引入抽象。...这个方法执行部分函数应用——意味着它创建一个新的函数,以以下方式调用 bind() 的接收者:this 的值是 thisValue,参数从 arg1 开始直到 argN,然后是新函数的参数。...在原型链的任何位置更改属性 如果要更改继承的属性,首先必须找到拥有该属性的对象(参见查找定义属性的对象),然后在该对象上执行更改。

    40420

    避免这些常见的JavaScript错误

    在今天,JavaScript是最流行的编程语言之一,如果你希望钻研JavaScript,这里有几个需要避免的问题 1.使用==而不是=== 在刚开始学习JavaScript时,这是初学者最容易犯的错误...3.类中不正确使用this 这可能是大家从Java转向学习JavaScript普遍头疼的问题。在Java中,this指向当时的对象,但在JavaScript事实并非如此。...只有函数作用域,而且所有对象都分享在一个全局命名空间下,在大的项目中,这会带来很大的问题。...( // 将函数写在圆括号中 function(){} // 返回函数对象)() // 立即调用// 也可以使用下面同样函数效果!...forEach(([key, value]) => console.log(`key=${key} value=${value}`)); //这也是不错的方法 6.省略分号 如果忘写分号,JavaScript

    63840

    ES6-标准入门·Iterator 和 for of 循环

    第二次调用指针对象的 next 方法,指针就指向数据结构的第二个成员。 不断调用指针对象的 next 方法,直到它指向数据结构的结束位置。...默认的 Iterator 接口部署在 Symbol.iterator 属性上,调用 Symbol.iterator 方法,会得到当前数据结构默认的遍历器生成函数。...数组 JavaScript 原有的 for…in 循环只能获得对象的键名,不能直接获取键值。ES6 提供的 for…of 循环允许遍历获得键值。...一种解决方法是,使用 Object.keys 方法将对象的键名生成一个数组,然后遍历这个数组: for (var key of Object.keys(someObject)) { console.log...console.log(key, '->', value) } // a -> 1 // b -> 2 // c -> 3 JavaScript 提供其它几种循环如 forEach、for…in 方式。

    31210

    JS系列2-怎么把一个对象当做数组使用

    看一下MDN上的解释: Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性...,用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。...forEach需要传入一个函数,函数的第一个参数是当前操作的元素值,第二个参数是当前操作的元素索引,第三个参数是正在操作的对象。...,我们主要看最后一句,其执行方式和数组的forEach完全相同,我们在调用Proxy封装的对象时,获取数据时,会调用get函数,第一个参数为原生对象,第二个参数为属性名-forEach,在这里就要修改我们的...首先p.forEach的参数是一个函数,因此我们代理对象的返回值需要接收一个函数作为参数,因此修改如下: function forEach(target) { return (callback) =

    1.8K30
    领券