function test(){
alert(this.length)
}
则,如下调用:
var str = new String(“test”)
str.test = test
str.test()
此时的this就是字符串str,则调用过程弹出this的长度,实际就是弹出这里的str的长度,所以结果是4.
而如果是下面的调用:
var arr = new Array(1,2,3,4,5,6)
arr.test = test
arr.test()
则这里的this就是arr这个数组,相应的弹出的就是数组arr的长度,也就是6.
而当没有对象来调用这个函数,即直接调用时,如下:
test()
因为在js中,全局的定义默认都是window的属性或对象,所以这里的调用,实际上是如下调用:
window.test()
window的length为0.则弹出的就是0.如果你定义了一个length,比如如下调用:
var length = 10
test()
则弹出的就是10了。因为全局的定义一个length,实际相当于给window添加或重写了一个属性length。
第一个this.name指的是变量name(对应var name="The Window"这个),第二个this.name指的是object这个map里面的name,this指的是object这个map对象。
this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,下面分四种情况:
情况一:纯粹的函数调用 :这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。
情况二:作为对象方法的调用 :函数还可以作为某个对象的方法调用,这时this就指这个上级对象。
情况三 作为构造函数调用 :所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。
情况四 apply调用 :apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。
谁调用函数,this就指向谁
1.this指向的,永远是对象
2.this指向谁, 不取决与this写在哪,而是取决于函数在哪调用
3.this指向的对象,我们成为函数的上下文context,也叫函数的调用者
1.通过函数名()直接调用:指向window
2.通过对象.函数名()调用:指向这个对象
3.通过数组下标.函数名()调用,指向这个数组
4.通过window内置函数( setInterval setTimeout 等)的回调里调用。指向window
5.函数作为构造函数,new关键字实例化之后调用,指向实例化对象