function 中的 this 具体是指代谁呢

紧心 2010-08-24 06:13:26
比如有一个function:
<script language="JavaScript" type="text/javascript">function imenus_data0(){


this.menu_showhide_delay = 800
this.show_subs_onclick = false
this.hide_focus_box = false


……

下面的就不拷贝了

这个函数中的this 指代谁呢?我以为是指代windows呢,可是好象不是,指代document好象也不是?
难道是谁调用这个函数,就指代谁吗?
那么menu_showhide_delay 之类的就是他们的属性吗?貌似也没有这样的属性啊?

请那位有经验的大侠执导一下啊.
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
crazymanjllp 2010-08-24
  • 打赏
  • 举报
回复
你这样用就是指他imenus_data0本身
Objector 2010-08-24
  • 打赏
  • 举报
回复
imenus_data0单纯这样执行,this就是window
否则this指向调用它的对象
kc8886 2010-08-24
  • 打赏
  • 举报
回复
this :指的是调用环境 也就是说 谁调用他 this 就是谁
wcwtitxu 2010-08-24
  • 打赏
  • 举报
回复 1
函数中的 this 指向,在函数定义时,是未知的。

当函数被调用时,才确定其指向



var obj1 = {};
var obj2 = {};
var obj3 = {};

// 传入什么,返回什么
function unchange(x) {
return x;
}

function doSth() {
this.flag = "做个记号";

if (this == window)
return alert("this == window");
for (var x in window) {
if (this == window[x])
return alert("this == " + x);
}
}

// doSth 已定义好,但函数中的 this 是指向谁还是个未知数,具体因调用方式不同而异



// 直接调用, this 指向全局对象,浏览器中执行时,就是 window;
doSth();


// 作为 obj1 的属性调用时,this 指向 obj1
obj1.doSth = doSth;
obj1.doSth();


// 作为函数返回值传出时,已不当作 obj1 的属性, 相当于直接调用。this 指向 window
unchange(obj1.doSth)();


// 作为构造函数使用时,this 指向刚刚创建的对象
var newObject = new doSth();
alert(newObject.flag);


// call, apply 调用,可转移 this 指向
doSth.call(obj2); // 指向 obj2
doSth.apply(obj3, []); // 指向 obj3

kslion 2010-08-24
  • 打赏
  • 举报
回复
在这里,你可以把函数imenus_data当成一个类来看。
bforesc 2010-08-24
  • 打赏
  • 举报
回复
这里可以看作imenus_data()是个类(或对象), imenus_data对象被实例化后this指向的就是该对象的实例本身.
bforesc 2010-08-24
  • 打赏
  • 举报
回复
this指代的将是imenus_data的实例.

87,910

社区成员

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

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