这件小事你懂的!!!

周凯_csdn 2011-07-28 05:44:07

<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对象


<script language="javascript">
var name = "The Window";
  var object = {
   name : "My Object",
   getNameFunc : function(){
return this.name;
    }
 };
 alert(object.getNameFunc());
</script>


以上代码没有使用闭包,输出结果是“My Object”

路过请给予分析,谢。。。
问题:

两种情况下this为何不同,原因何在;最好能冲变量作用于分析。。。。
...全文
159 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
q22944689 2011-07-29
  • 打赏
  • 举报
回复
方法和函数原来不同
周凯_csdn 2011-07-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xingqiliudehuanghun 的回复:]

js中的函数有四种调用方式:
1.作为函数来调用
2.作为方法调用
3.作为构造器来调用
4.apply/call 调用

3和4比较好理解,容易混淆的是1和2。当作为函数来运行时this指window
当作为方法来运行时this指向当前对象。那么只有确定下函数是作为方法
来执行还是作为函数来执行问题就解决了。那么如何区分呢?根据ECMA规范:
4.3.27
method
……
[/Quote]


翻了下ECMA-262, 3rd edition, December 1999标准,发现
"a method is a function associated with an object via a property"
"a function stored in a property of an object is called a method"
方法是基于对象
函数是对象的属性
周凯_csdn 2011-07-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xingqiliudehuanghun 的回复:]

js中的函数有四种调用方式:
1.作为函数来调用
2.作为方法调用
3.作为构造器来调用
4.apply/call 调用

3和4比较好理解,容易混淆的是1和2。当作为函数来运行时this指window
当作为方法来运行时this指向当前对象。那么只有确定下函数是作为方法
来执行还是作为函数来执行问题就解决了。那么如何区分呢?根据ECMA规范:
4.3.27
method
……
[/Quote]

javascript 中函数和方法区别,是什么?
taoge2121 2011-07-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 boyleichinasoft 的回复:]
引用 4 楼 xingqiliudehuanghun 的回复:

js中的函数有四种调用方式:
1.作为函数来调用
2.作为方法调用
3.作为构造器来调用
4.apply/call 调用

3和4比较好理解,容易混淆的是1和2。当作为函数来运行时this指window
当作为方法来运行时this指向当前对象。那么只有确定下函数是作为方法
来执行还是作为函数来执行问题就解决了。那……
[/Quote]
当函数作为一个对象属性出现的时候,我们就叫它是一个方法。没有大区别
豆虫 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pj100 的回复:]
只有一个函数被作为一个对象的熟悉时
这句是什么意思?
[/Quote]
“黄昏”说的是只有一个函数被作为一个对象的属性时才能被称为一个方法 呵呵
燥动的心 2011-07-28
  • 打赏
  • 举报
回复
只有一个函数被作为一个对象的熟悉时
这句是什么意思?
  • 打赏
  • 举报
回复
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.
只有一个函数被作为一个对象的熟悉时才能被成为一个方法。因此为身边会
出现这样的运行结果也就很容易理解了
knightzhuwei 2011-07-28
  • 打赏
  • 举报
回复
alert(object.getNameFunc()());等价于alert((object.getNameFunc())());
this指函数的调用者 没有显式指明调用者的时候调用者就是this

MuBeiBei 2011-07-28
  • 打赏
  • 举报
回复
第一个因为你返回来了一个闭包,
alert(object.getNameFunc()());

在执行的时候是在window的作用域下,执行的。
所以this指向window

第二个
调用getNameFunc()里面直接返回this.name因为当前作用域是Object,所以this.name会在Object里找,就输出My Object
豆虫 2011-07-28
  • 打赏
  • 举报
回复
记住一点 this永远指向当前对象

第一种情况 function里再加一个function this作用域变了 不再是object 指向window

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧