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

JavaScript:*可以*用call / apply / bind设置未定义的属性吗?

JavaScript中的call、apply和bind方法主要用于改变函数的执行上下文(即函数内部的this指向)和传递参数。

call和apply方法可以立即调用函数,并且可以指定函数执行时的this值和参数。它们的区别在于传递参数的方式不同:call方法接受一个参数列表,apply方法接受一个包含参数的数组。

bind方法与call和apply不同,它不会立即调用函数,而是返回一个新的函数,这个新函数的执行上下文和参数已经被绑定。可以通过bind方法预先设置函数的部分参数,这在某些场景下非常有用。

在JavaScript中,可以使用call、apply和bind方法来设置未定义的属性,但是这些方法并不会直接设置属性,而是通过改变函数的执行上下文来间接影响属性的访问。具体来说,可以通过call、apply和bind方法将函数绑定到一个对象上,并在函数内部使用this关键字来访问该对象的属性。

以下是一个示例:

代码语言:txt
复制
var obj = {
  name: "John",
  getName: function() {
    console.log(this.name);
  }
};

var anotherObj = {
  name: "Jane"
};

obj.getName.call(anotherObj); // 输出 "Jane"
obj.getName.apply(anotherObj); // 输出 "Jane"

var boundFunc = obj.getName.bind(anotherObj);
boundFunc(); // 输出 "Jane"

在上面的示例中,我们定义了一个包含name属性和getName方法的对象obj。通过call、apply和bind方法,我们将getName方法绑定到了anotherObj对象上,并在函数内部使用this关键字来访问anotherObj对象的name属性。

需要注意的是,call、apply和bind方法并不会直接设置属性,它们只是改变了函数的执行上下文。如果要设置属性,可以直接通过对象的赋值操作来实现。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,无法给出相关链接。但腾讯云提供了丰富的云计算服务,包括云服务器、云数据库、云存储等,可以根据具体需求选择适合的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScriptcall()、apply()、bind() 用法

JavaScript 中,callapplybind 是 Function 对象自带三个方法,这三个方法主要作用是改变函数调用过程中 this 指向 1 apply Function.apply...(person1, ["Oslo", "Norway"]); 2 call Function.call(obj[,params...])...(person1, "Seattle", "USA"); 3 bind Function.bind(obj[,params...]) bind是ES5 新增一个方法,它传参和call类似,也是接收两个参数...(person1, "Seattle", "USA")(); 可以从上面看出,使用方法基本和call一致,只是后面多了(),其实是bind不会立即执行对应函数,只是返回对函数引用。...那为什么要引入bind呢,是因为callapply会自动执行目标函数,从而无法绑定在事件上,因为事件是我们手动触发,而bind不会自动执行目标函数。

7591211

JavaScriptcall()、apply()、bind() 用法

apply()、bind() 都是用来重定义 this 这个对象!...obj.myFun.call(db);    // 德玛年龄 99 obj.myFun.apply(db);    // 德玛年龄 99 obj.myFun.bind(db)();   // 德玛年龄...由此得出结论,bind 返回是一个新函数,你必须调用它才会被执行。 2,对比callbindapply 传参情况下 ?...从上面四个结果不难看出: callbindapply 这三个函数第一个参数都是 this 指向对象,第二个参数差别就来了: call 参数是直接放进去,第二第三第 n 个参数全都用逗号分隔...bind 除了返回是函数以外,它 参数和 call 一样。 当然,三者参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!

81830

谈谈JavaScriptcallapplybind

JavaScript中,如果想要改变当前函数调用的上下文对象时候,我们都会联想到callapplybind。比如下面?...callapplybind区别 在说区别之前,先简单说下三者共同之处吧: 都是用来改变函数this对象指向 第一个参数都是this要指向对象 都可以利用后续参数进行传参 下面说下区别:...// call_me_R 复制代码 在笔者看来,call, applybind区分点主要是上面的这两点,欢迎有想法读者进行补充~?...手写call, apply, bind方法 这里是简单实现下相关方法封装,为了简洁,我这里尽量使用了ES6语法进行编写,详细参考代码可以直接戳airuikun大牛airuikun/Weekly-FE-Interview...答: 这是为了包含返回函数也能传参情况,也就是bind()()中第二个括号可以传递参数。 callapply哪个好?

34040

理解JavaScriptThis,Bind,CallApply

this指向对象可以是基于全局,在对象上,或者在构造函数中隐式更改,当然也可以根据Function原型方法bindcallapply使用显示更改。...在这篇文章中,你将学习到基于上下文隐式表示含义,并将学习如何使用bindcallapply方法来显示确定this值。...然而,使用call, applybind,你可以显示地决定this应该指向哪。 决定什么时候使用call, applybind是一件很困难事情,因为它将决定你程序上下文。...然而,你可以在函数中使用callapply调用book上下文this。...总结 在这篇文章中,你学到了关于JavaScriptthis,和基于隐式运行时绑定可能具有的不同值,以及通过bindcallapply显示绑定。

32540

浅谈JavaScriptapply,callbind

call call() 与 apply() 类似,区别在于 apply() 第二个参数为数组,而 call() 把参数跟在第一个参数后面,并且可以跟多个参数。...因为 bind() 特点,leadingThirtysevenList(1, 2, 3) 可以写为 list.bind(null, 37, 1, 2, 3)。...总结 apply() call() bind() 三者区别不大,都是用来改变函数 this 指向。 apply() 把 this 所需参数放入一个数组,作为 apply() 第二个参数传入。...当参数不定时,我们可以传入 arguments。 call() 和 bind() 则把参数按顺序依次传入。...bind() 返回对应函数,便于稍后调用,而 apply()、call()则立即调用 由于其特性,使用起来千奇百怪,有各种各样有趣用法,还等待我们去挖掘。

53930

【译】理解JavaScriptThis,Bind,CallApply

this指向对象可以是基于全局,在对象上,或者在构造函数中隐式更改,当然也可以根据Function原型方法bindcallapply使用显示更改。...在这篇文章中,你将学习到基于上下文隐式表示含义,并将学习如何使用bindcallapply方法来显示确定this值。...然而,使用call, applybind,你可以显示地决定this应该指向哪。 决定什么时候使用call, applybind是一件很困难事情,因为它将决定你程序上下文。...然而,你可以在函数中使用callapply调用book上下文this。...总结 在这篇文章中,你学到了关于JavaScriptthis,和基于隐式运行时绑定可能具有的不同值,以及通过bindcallapply显示绑定。

77320

JavaScriptapplycallbind区别与用法

apply()、call()和bind()方法都是Function.prototype对象中方法,而所有的函数都是Function实例。三者都可以改变this指向,将函数绑定到上下文中。 1....语法: fun.call(thisArg, arg1, arg2, ...) 1.3 Function.prototype.bind() bind()方法创建一个新函数, 当被调用时,将其this关键字设置为提供值...不同之处在于,在给调用函数传递参数时,apply()是数组,call()参数是逐个列出。 2.3 bind()用法 ? bind方法传递给调用函数参数可以逐个列出,也可以写在数组中。...bind方法与callapply最大不同就是前者返回一个绑定上下文函数,而后两者是直接执行了函数。因此,以上代码也可以这样写: ?...(3).三者都可以传参,但是apply是数组,而call是有顺序传入。 (4).bind 是返回对应函数,便于稍后调用;applycall 则是立即执行 。 5.

1.1K20

JavaScriptcall,apply,bind方法使用及原理

JavaScript里,call(),apply(),bind()都是Function内置三个方法, 它们作用都是显示绑定this指向,三个方法第一个参数都是this指向对象,也就是函数在运行时执行上下文...当我们定义一个新对象,需要使用其他对象方法时候,我们不需要重新开发重复方法逻辑,借助apply,apply,bind三个方法可以实现对这些方法调用。...特点: applycallbind三个方法第一个参数都是函数在调用时this指向对象,也就是运行时上下文(this显示绑定原理) applycall第一个参数为空,null,undefined...,this指向是window applycall两个方法只是参数形式有所不同,apply参数是一个数组,call则是参数列表版本 applycall 则是立即调用,bind 是则返回对应函数 常见一些应用...: 数组合并 我们创建arr和other两个数组,当我们需要合并两个数组时候,可以使用concat方法进行操作,但是concat需要创建新数组对象,我们可以借助apply方法不需要创建新对象,不需要遍历数组

1.1K20

关于JavaScriptapplycallbind详细使用讲解

JavaScript中我们对函数执行通常是直接函数名称加个括号就可以进行调用了,但是这样调用有一个缺点,就是函数中this指向是默认绑定,有时候this指向不太符合我们预期。...至于JavaScript中this指向可以看我这篇文章《在JavaScript中,this指向详细讲解》那我们想要把函数this指向变成我们预期想那样有什么方法?...这时候JavaScript函数applycallbind调用就起到作用了applyapply接受两个参数,第一个参数是this指向,第二个参数是函数接受参数,以==数组==形式传入,==且当第一个参数为...])()//bind调用后结果总结callbindapply 这三个函数第一个参数都是 this 指向对象,第二个参数差别就来了。...callapply都是临时改变一次this指向,并立即执行。而bind是返回一个永久改变this指向函数。

11710

故事讲技术:关于js applycallbind区别,我们可以call忘掉,只使用apply就足够了

简单说,apply 是给框架设计者,而 call 是给开发者。两者都能扩充函数作用域。而 bind,主要是绑定作用域,并不是函数执行。...call 方法作用和 apply 方法类似,区别就是 call 方法接受是参数列表,而 apply 方法接受是一个参数数组。...call 语法: function.call(thisArg, arg1, arg2, ...) bind() 方法创建一个新函数,在 bind() 被调用时,这个新函数 this 被指定为 bind...(arr1) 对我们开讲,记住使用 apply可以,将 call 忘记吧。...2020 年 6 月 17 日 --- 如果还有疑问与时间,可以看一下这几篇文章: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference

90220

【面试题解】你了解callapplybind?那你可以手写一个

---- 本系列面试题旨在学会相关知识点,从而轻松应对面试题各种形式,本文讲解了 JavaScript 基础 callapplybind 作用。...window : Object(ctx) // 如何把函数foothis 指向 ctx这个上下文呢 // 把函数foo赋值给对象o一个属性 这个对象o去调用foo this就指向了这个对象...手写 apply 之前讲过,callapply 唯一区别就是传递参数不同,所以我们只需要改一下对参数处理,其它call 一致就可以了。...bindcall/apply 区别 是否立刻执行: call/apply 改变了函数 this 上下文后 马上 执行该函数。 bind 则是返回改变了上下文后函数, 不执行该函数 。...返回值区别: call/apply 返回 fun 执行结果。 bind 返回 fun 拷贝,并指定了 fun this 指向,保存了 fun 参数。

20930

javascript函数callapplybind原理及作用详解

javascript函数 callapplybind 本质是用来实现继承,专业点说法就是改变函数体内部 this 指向,当一个对象没有某个功能时,就可以这3个来从有相关功能对象里借用过来。...最早javascript实现继承是通过 prototype 原型链,后来有了 class 类,可以像其他面向对象语言一样来实现类继承。...和 apply 其实是同一个东西,区别只有参数不同,callapply 语法糖,call 方法接受是一个参数列表,而 apply 方法接受是一个包含多个参数数组 bind bind 方法创建一个新函数...实际应用场景 应用场景一:从数组中找出最大值、最小值 原生 Math.max、Math.min 只能传入逗号分隔参数列表,但实际业务中我们往往拿到是数组,就可以下面的方法来实现(也可以扩展运算符...应用场景二:伪数组转化成真数组 一般用于dom节点列表、具有 length 和序号属性伪数组对象、函数参数 arguments Array.prototype.slice.apply(fakeArray

19620

JavaScript进阶教程(4)-函数内this指向解惑call(),apply(),bind()区别

然而实际上 JavaScript 内部已经专门为我们提供了一些函数方法,用来帮我们更优雅处理函数内部 this 指向问题。这就是接下来我们要学习 callapplybind 三个函数方法。...4.2 callapply使用 applycall可以改变this指向。...4.3 bind bind() 函数会创建一个新函数(称为绑定函数),新函数与被调函数(绑定函数目标函数)具有相同函数体(在 ECMAScript 5 规范中内置call属性)。...可以用来指定内部 this 指向,然后生成一个改变了 this 指向函数 它和 callapply 最大区别是:bind 不会调用 bind 支持传递参数,它传参方式比较特殊,一共有两个位置可以传递...applycallbind方法是用来改变this指向applycall是调用方法时候改变this指向,bind方法是复制一个新函数,改变this指向。

60642

50行javaScript代码实现简单版 call , apply ,bind 【中级前端面试基础必备】

在实现自己call,apply,bind前,需要复习一下this....call,思路如下: 通过对象属性方式调用函数,这个函数里面的this指向这个对象 每次调用新增一个symbol属性,调用完毕删除 这个symbol属性就是调用mycall方法函数 函数形参中使用....传递第二个参数是数组,这里我们只需要在调用时,将参数...把数组展开即可 自己实现bindbindapply,call本质区别,bind不会改变原函数this指向,只会返回一个新函数(我们想要那个...但是applybind会改变原函数this指向并且直接调用 bind在编写框架源码,例如koa等中用得特别多: //实现自己myBind Function.prototype.myBind..., ...secondParams); // call调用源函数绑定this指向并传递参数,返回执行结果 }; fToBind.prototype = Object.create(thisFn.prototype

33310

一个简单例子让你很轻松地明白JavaScriptapplycallbind三者用法及区别

JavaScriptapplycallbind三者用法及区别 引言 正文 一、applycallbind共同用法 二、 apply 三、 call 四、 bind 五、其他应用场景 六、...总结 结束语 引言 这是我第一篇前端面试题文章,也是用来帮助自己巩固复习知识, 在之后希望拿到自己满意offer,这第一篇讲就是一道常见面试题,关于JavaScriptapplycallbind...正文 如果有不想看过程小伙伴可以直接跳到 总结 一、applycallbind共同用法 先将一下特别概念性,三者共同用法就是可以改变函数this指向,将函数绑定到上下文中。...六、总结 applycallbind 三者都是可以改变函数this指向 applycall 都是改变函数this指向,并传入参数后立即调用执行该函数 bind 是在改变函数this指向,并传入参数后返回一个新函数...,不会立即调用执行 apply 传入参数是数组形式call 传入参数是按顺序逐个传入并以逗号隔开; bind 传入参数既可以是数组形式,也可以是按顺序逐个传入。

22910

从底层理解this是什么

咱们来列举下设置函数执行上下文中 this 值方法: 1.通过函数 callapplybind 方法设置 用法如下: let bar = { myName : "dell", } function...callapplybind为何物 上文用了多次call,想必大家已经明白call做了什么了: MDN:call() 方法使用一个指定 this 值和单独给出一个或多个参数来调用一个函数。...,咱们分析一下: 将被调用函数作为一个属性添加到传入对象上 从而可以实现在传入对象上,调用需要被调用函数 咱们分析完发现核心原理还是:谁调用函数,函数this指向谁 万变不离其宗:谁调用函数,...这句话其实可以帮助我们理解绝大部分this问题了 实现apply apply其实和call差不多,只不过传递参数方式不同: foo.call(obj,[param1,param2,......, ...arguments]); } } 咱们来分析一下bind: 其实bindapply就一点区别,bind返回一个被改变了内部this指向函数 当调用返回函数,改变了内部this指向函数才能运行

74520

JavaScript基础:callapplybind详解,三者有何区别和联系

函数原型链中 applycallbind 方法是 JavaScript 中相当重要概念,与 this 关键字密切相关,相当一部分人对它们理解还是比较浅显,所谓js基础扎实,绕不开这些基础常用...调用call/apply/bind必须是个函数 callapplybind是挂在Function对象上三个方法,只有函数才有这些方法。...考虑可读性:参数数量不多就用call,参数数量比较多的话,把参数整合成数组,使用apply。 参数集合已经是一个数组情况,apply,比如上文获取数组最大值/最小值。...你能手写实现一个call? 思路 根据call规则设置上下文对象,也就是this指向。...通过设置context属性,将函数this指向隐式绑定到context上 通过隐式绑定执行函数并传递参数。

1.1K10

js基础-关于call,apply,bind一切

函数原型链中 applycallbind 方法是 JavaScript 中相当重要概念,与 this 关键字密切相关,相当一部分人对它们理解还是比较浅显,所谓js基础扎实,绕不开这些基础常用...目录 call,apply,bind基本介绍 call/apply/bind核心理念:借用方法 callapply应用场景 bind应用场景 中高级面试题:手写call/applybind...调用call/apply/bind必须是个函数 callapplybind是挂在Function对象上三个方法,只有函数才有这些方法。...你能手写实现一个call? 思路 根据call规则设置上下文对象,也就是this指向。...通过设置context属性,将函数this指向隐式绑定到context上 通过隐式绑定执行函数并传递参数。

1.4K21
领券