这件小事你懂的!解决思路
这件小事你懂的!!!
以上代码使用了闭包,输出结果“The Window”,this是window对象?为什么this不是object对象
以上代码没有使用闭包,输出结果是“My Object”
路过请给予分析,谢。。。
问题:
两种情况下this为何不同,原因何在;最好能冲变量作用于分析。。。。
------解决方案--------------------
记住一点 this永远指向当前对象
第一种情况 function里再加一个function this作用域变了 不再是object 指向window
------解决方案--------------------
第一个因为你返回来了一个闭包,
alert(object.getNameFunc()());
在执行的时候是在window的作用域下,执行的。
所以this指向window
第二个
调用getNameFunc()里面直接返回this.name因为当前作用域是Object,所以this.name会在Object里找,就输出My Object
------解决方案--------------------
alert(object.getNameFunc()());等价于alert((object.getNameFunc())());
this指函数的调用者 没有显式指明调用者的时候调用者就是this
------解决方案--------------------
js中的函数有四种调用方式:
1.作为函数来调用
2.作为方法调用
3.作为构造器来调用
4.apply/call 调用
3和4比较好理解,容易混淆的是1和2。当作为函数来运行时this指window
当作为方法来运行时this指向当前对象。那么只有确定下函数是作为方法
来执行还是作为函数来执行问题就解决了。那么如何区分呢?根据ECMA规范:
4.3.27
method
function that is the value of a property.
只有一个函数被作为一个对象的熟悉时才能被成为一个方法。因此为身边会
出现这样的运行结果也就很容易理解了
------解决方案--------------------
只有一个函数被作为一个对象的熟悉时
这句是什么意思?
------解决方案--------------------
- JScript code
<script language="javascript"> var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()()); </script>
以上代码使用了闭包,输出结果“The Window”,this是window对象?为什么this不是object对象
- JScript code
<script language="javascript"> var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return this.name; } }; alert(object.getNameFunc()); </script>
以上代码没有使用闭包,输出结果是“My Object”
路过请给予分析,谢。。。
问题:
两种情况下this为何不同,原因何在;最好能冲变量作用于分析。。。。
------解决方案--------------------
记住一点 this永远指向当前对象
第一种情况 function里再加一个function this作用域变了 不再是object 指向window
------解决方案--------------------
第一个因为你返回来了一个闭包,
alert(object.getNameFunc()());
在执行的时候是在window的作用域下,执行的。
所以this指向window
第二个
调用getNameFunc()里面直接返回this.name因为当前作用域是Object,所以this.name会在Object里找,就输出My Object
------解决方案--------------------
alert(object.getNameFunc()());等价于alert((object.getNameFunc())());
this指函数的调用者 没有显式指明调用者的时候调用者就是this
------解决方案--------------------
js中的函数有四种调用方式:
1.作为函数来调用
2.作为方法调用
3.作为构造器来调用
4.apply/call 调用
3和4比较好理解,容易混淆的是1和2。当作为函数来运行时this指window
当作为方法来运行时this指向当前对象。那么只有确定下函数是作为方法
来执行还是作为函数来执行问题就解决了。那么如何区分呢?根据ECMA规范:
4.3.27
method
function that is the value of a property.
只有一个函数被作为一个对象的熟悉时才能被成为一个方法。因此为身边会
出现这样的运行结果也就很容易理解了
------解决方案--------------------
只有一个函数被作为一个对象的熟悉时
这句是什么意思?
------解决方案--------------------