问题描述
- 一个js的apply问题,this为什么不是指向sum1而是window
-
var m=1;
function sum () {
alert(this.m);
}
sum(); //1
function sum1() {sum.apply(this);
}
sum1(); //1
sum.apply(this)明明在sum1对象里面调用的,this应该指向sum1啊,为什么指向的是window?
解决方案
sum1是一个函数不是一个对象,它没有this的。this是“本对象”不是“本函数”
解决方案二:
任何时候this都不会指向sum1,除非sum1是一个对象,在它的成员函数内使用。
解决方案三:
你sum1里面的this对象就是window,apply后this不是window是什么。。
解决方案四:
当函数直接被调用的时候,如sum(),它就是一个函数,和对象什么的无关,它的作用域链就是其运行环境的作用域链,这个例子中sum1()作为函数执行的时候,它的外层没有写在哪个作用域链中,姑且认为是window吧,sum1()中的sum在执行的时候,作用域就是sum1的外部作用域加上sum1函数内的局部作用域.所以自然就是外层的m了.函数是对象,是指这样用:var a={fun1:function(){return 123;}},其中fun1和{fun2:123}中的fun2的级别是一样的,都是一个属性,js的对象的属性是什么,就是六种基本类型,fun1是基本类型中的Object类型,这样说明白吗?
时间: 2024-12-02 22:28:23