js中this关键字如何应用?

发布网友

我来回答

3个回答

热心网友

网上说起来js中的this,各种用法,但归根结底只有一点:this表示调用该函数的那个对象!换句话说,this所代表的,就是函数名前面的那个点之前的部分。当然,有些地方找不到点,但总是有一个对象在调用这个函数,而函数中的this,就表示这个对象。

getFullName是一个函数,问题(1)中的调用者是person.prop,所以getFullName函数中this在执行person.prop.getFullName()时就指向person.prop,this.fullname就是person.prop.fullname,就是Jane。

而var test = person.prop.getFullName,实际上就是把这个函数单独提出来,再给它起个名字。此时的test与person.prop没有任何关系,所以调用函数test,就不用考虑person.prop。

在浏览器中执行js,有一个潜规则,就是全局变量默认都是内置对象window的属性。所以,var test在全局作用域中,相当于window.test,就好像前面的var fullname = "Anna",就相当于window.fullname,还有person也是一个道理。所以,这里调用test(),等价于window.test(),这样就可以看出,test函数中的this,指向的是window,而window.fullname,它的值是Anna。

关于第三个问题,估计你是被var test = person.prop.getFullName所迷惑。实际上,这里的getFullName是一个函数,但js中函数也跟字符串、数字一样,可以当做变量赋值,所以这是一个赋值操作,函数后面没有加括号。而一旦加括号,就变成了函数调用,意义也就不一样了。不加括号,test和person.prop.getFullName是同一个函数;加了括号,test就变成了person.prop.getFullName执行的返回值了。

热心网友

js和java、C#之类的语言不同,服务器的编程语言是面向对象的结构,js是基于对象,也就是说最高层的对象是window对象,如果说直接定义了一个function 那就相当于在window对象下面扩展了一个方法或属性 问题二也就是说你定义了一个 test的变量,同时又指向了 getFullname的方法,那么在调用的时候实际就是 window.test() 在window对象下有个fullname的属性,这个时候this的作用域是 window,所以就找到了window下面的属性 问题3 简单的来说,谁调用的方法 this就是谁,this属性是隐世的传递,如果想要改变this的 作用域 则使用 方法名.call(第一个参数就是this)

热心网友

你说的没错,‘this’就是指向调用其方法的对象,所以person.prop.getFullName()是person.prop调用了getFullName(),获得的是person.prop的fullname,也就是Jane了

var test= person.prop.getFullName 注意这句是没有括号的,person.prop.getFullName是一个function,所以test也会是一个function类型,而实现内容是和person.prop.getFullName一样的,但没有任何调用关系,也就是说,这句话等同于:

var test= function() {

   return this.fullname;

}

你这么看的话,如果用了test(); 就等于是调用了同级的fullname,就是Anna了

不是很懂你这一问的意思,不过不加()的话,只是一个function类型,他代表了一段代码的实现,但不会去执行这段代码,加了()就是调用执行这个方法

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com