很多时候讲到语言入门,大家会认为就是要了解一下语言的语法、数据类型和常用函数。这一课对于所有的计算机专业的毕业生来说都可以自学,然而在
最近的实践中(带了两个实习生自学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指向结合对象冒充,可以实现代码的灵活组装。
分享到:
相关推荐
主要介绍了JS中call/apply、arguments、undefined/null方法详解的相关资料,需要的朋友可以参考下
主要介绍了javascript利用apply和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、相同点:两
js中arguments,caller,callee,apply的用法小结.docx
NULL 博文链接:https://fkshl.iteye.com/blog/1178391
本文实例讲述了js中apply()和call()的区别与用法。分享给大家供大家参考,具体如下: 每个函数都包括两个非继承而来的方法:apply()和call()。两者用途都是在特定的作用域中调用函数,等于重新设置了函数体内this...
理解Javascript函数形式参数与arguments
apply第一个参数传对象,参数可以是数组或者arguments 对象。 这两个方法通常被用来类的继承和回调函数: 作用一、类的继承: 先来看这个例子: 代码如下: function Person(name,age){ this.name = name; this.age=...
JavaScript 中通过call或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。简单的说就是改变函数执行的上下文,这是最基本的用法。两个方法基本区别...
在一些jQuery插件中经常看到类似 callback.call(xxx,xxx) 虽然看到书上有介绍 说call和apply函数可以改变作用域,但还是无法非常透彻的理解改变作用域主要是为了解决什么问题,有没有替代方案,或者 这2个函数主要...
主要我是要解决一下几个问题: 1. apply和call的区别在哪里 2. apply的其他巧妙用法(一般在什么情况下可以使用apply) 我首先从网上查到关于apply和call的定义,然后用示例来解释这两个方法的意思和如何去用. ...
JS:arguments
本文实例讲述了JavaScript中arguments和this对象用法。分享给大家供大家参考,具体如下: 在函数内部有两个特殊的对象 : arguments和this。 1、arguments对象 js函数不介意定义多少参数,也不在乎传递进来多少参数,...
javascript的Function 属性: 1、Arguments对象 2、caller 对调用单前函数的Function的引用,如果是顶层代码调用, 则返回null(firefox返回undefined)。 注:只有在代码执行时才有意义 3、length 声明...
} arguments在JavaScript语法中是函数特有的一个对象属性(Arguments对象),用来引用调用该函数时传递的实际参数。这个对象很象数组,拥有length属性且使用下标的形式来获取其元素,但它又并非真正的Array对象。更...
JavaScript中arguments的使用方法详解 js这是一门弱语言,不像其他语言如c,java等,有严格的规范, 所以现在也流传着一种说法,js本来就不是一种语言; 说回arguments,它是js中函数内置的一个对象,而执行函数...
主要介绍了 深入学习js函数的隐式参数 arguments 和 this,arguments是一个类数组结构,它保存了调用时传递给函数的所有实参;this是函数执行时的上下文对象, 这个对象有些让人感到困惑的行为。 下面分别对他们进行...
前言 最近在看JavaScript设计模式,其中有一些巧妙的函数。... return this.apply(ctx, arguments) } 二、apply实现bind Function.prototype.bind = function () { var ctx = [].shift.apply(argume