很多时候讲到语言入门,大家会认为就是要了解一下语言的语法、数据类型和常用函数。这一课对于所有的计算机专业的毕业生来说都可以自学,然而在
最近的实践中(带了两个实习生自学js),我发现他们在学习js的时候会被这几个问题困扰:this指向、arguments为什么不是Array、
apply的用途及如何实现。写这篇文章是为了减少js新手被这几个问题困扰的时间,希望给js新手一点帮助。
- this
- 指向当前对象,通常在对象的构造函数中使用,用来引用对象。如
function Person(name){
this.name = name
}
var o = new Person('lisq')
这里this就指向o
- 对
于JScript 的客户版本,如果在其他所有对象的上下文之外使用,则它指的是window对象
Person('lisq')
这里
this就指向window
alert(window.name) 或者 alert(name)
- arguments
- 该对象代表正在执行的函数和调用它的函数的参数。如
function Person(name){
alert(arguments.length) //当前调用传递的几个参数
}
alert(Person.length)
//函数定义(期望)传递几个参数
- 需要说明的是arguments并不是一个数组,可用instanceof测试。
alert(arguments
instanceof Array) //false
这一点和document.getElementsByTagName很像,它返回的也不
是数组,但是具有length并且可以用索引访问每一个元素。所以在需要范围arguments中的一部分的时候,会联想到数组的slice,但是又不能
直接用arguments.slice(0, 2),只能用Array.prototype.slice.apply(arguments, [0,
2]),这里简单说一下Prototype中的$A,它可以把arguments强制转为一个数组对象,然后可以用很多扩展的自定义方法。
- apply call (对象冒充)
- apply 应用某一对象的一个方法,用另一个对象替换当前对象。
- call
调用一个对象的一个方法,以另一个对象替换当前对象。
- 其它没有太多差别,除了传递参数的不同,下面提供一个例子:
function
f(args1, args2){
alert(this.name)
alert(arguments.length)
}
var o1 = {
name : 'lisq'
}
f.apply(o1)
var o2 =
{
name : 'lufang'
}
f.apply(o2, [1, 2])
f.call(o2,
"hello")
三个中要数arguments最容易理解了,但是我不理解为什么它不是一个数
组。this指向结合对象冒充,可以实现代码的灵活组装。
分享到:
相关推荐
标题 "解析 this.initialize.apply(this, arguments)" 涉及到的是JavaScript编程中的一个关键概念,尤其是在对象构造和类继承的情景下。`this` 关键字在JavaScript中扮演着核心角色,它指的是函数调用时的上下文,而...
在JavaScript中,`call`和`apply`是两种非常重要的函数调用方式,它们都用于改变函数执行时的上下文,即改变`this`的指向。这两个方法的主要区别在于它们处理参数的方式。 `call`方法允许你指定一个对象来替代原...
在JavaScript中,`call`和`apply`是两个非常重要的函数调用方式,它们允许我们改变函数执行时的上下文环境,即`this`的指向。同时,`arguments`对象则是一个特殊对象,它在每个函数内部都可以访问,用于获取函数调用...
JavaScript中的`apply`和`arguments`对象是两个非常重要的特性,它们在函数复用和处理动态参数时起着关键作用。本文将详细讲解这两个概念及其在复用方法中的应用。 `apply`是JavaScript中Function对象的一个方法,...
### 理解JavaScript中的`caller`...综上所述,理解`caller`、`callee`、`call`、`apply`以及`arguments`对象在JavaScript编程中至关重要,它们不仅增强了函数的灵活性和复用性,还提供了深入分析和调试代码的强大工具。
在JavaScript中,实现对象继承主要有三种方式:原型链继承(prototype)、构造函数继承和call/apply继承。下面将分别详细介绍这三种继承方式的具体用法和实现原理。 1. 原型链继承(prototype) 原型链继承是...
在JavaScript中,`call`和`apply`是两个非常重要的函数,它们都允许开发者改变函数执行时的上下文,即`this`的指向。这两个方法主要用于实现函数的绑定和继承,以及处理数组或类数组对象。 首先,我们来看`call`的...
在JavaScript中,arguments、caller、callee和apply是四个与函数调用相关的特性,它们在编写高级和复杂的函数逻辑时非常有用。下面将详细介绍这些概念及其用法。 1. **arguments对象** arguments对象是一个特殊...
一、call和apply的说明 1、call,apply都属于Function.prototype的一个方法,它是JavaScript...2、语法:foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3); 3、相同点:两
接下来,我们讨论`call`和`apply`,它们是JavaScript中函数调用的两种特殊方式。`call`和`apply`的主要区别在于传递参数的方式:`call`接受一个参数列表,而`apply`接受一个包含参数的数组。 `call`方法允许我们...
在JavaScript中,call与apply是两个非常重要的关键字,它们的功能是改变函数执行时的上下文,也就是函数体内的this指向。通过call和apply可以调用某个函数,并且显式地指定该函数内部的this变量的值。 ### call和...
JavaScript中的call、apply和bind方法都是用来改变函数调用时的上下文(即this值)以及传递参数。它们之间的相同点在于,都能够指定函数执行时的this对象,并且都能接收参数。不同点在于它们的调用方式和执行时机。 ...
JavaScript中的`call`和`apply`是两种非常重要的函数调用方式,它们允许开发者改变函数执行的上下文,即函数内部的`this`值。这两个方法的主要区别在于传递参数的方式。 `call`方法的语法是`call(obj, arg1, arg2, ...
JavaScript中的`callee`、`call`和`apply`都是与函数有关的重要概念,它们提供了不同的方式来处理函数调用和上下文。以下是这三个特性的详细解释: **arguments.callee** `arguments.callee`是一个在函数内部可以...
在JavaScript中,apply和call是两个非常重要的函数,它们允许开发者在调用函数时指定函数体内this的值。了解apply和call的用法对于深入掌握JavaScript编程是非常有帮助的。首先,我们需要明白在JavaScript中,函数也...
本文将详细解释JavaScript中call(), apply(), 和 bind() 方法的作用、语法以及使用场景,并且会探讨回调函数的使用,帮助理解这些概念在实际编程中的应用。 首先,我们来探讨call() 和 apply() 方法。这两个方法都...
JavaScript中的`call`和`apply`都是函数对象的两个非常重要的方法,它们允许开发者在运行时改变函数执行的上下文,即改变`this`的指向。这两个方法的主要区别在于传递参数的方式。 `call`方法接收两个参数:第一个...
apply()和call()在JavaScript中非常有用,尤其在需要改变函数内this指向时。比如,在类的方法中,this往往指向实例本身,但在某些情况下,比如事件处理函数中,this可能指向的是触发事件的元素。这时就可以使用call...