关于this 的疑惑!

zhjzh_zjz 2003-04-07 04:28:51
首先感谢骆驼大哥多我原来发的一个贴自得指教。悉已明白。在此谢过。下面还有一个东西不太明白,希望得到大家的支持。

已经明白。谢谢大哥!骆驼大哥,还有个东西问一下你,就是那个this.我用过很多次,但发现其含义还是有些模糊。希望得到你的指教:以下几种情况好像其含义都不一样:
1、构造函数时
function mMenu(caption,href,img)
{
this.items=new Array();
this.caption=caption;
this.href=href;
this.img=img;
}
//此处,this代表mMenu 这个对象本身,
//这个最常用,明白

2
<button onclick="alert(this.id)" id="btn">test1</button> /*/此处代表 代表button 本身这个对象。这个也很常用,知道用法*/

alert(btn.onclick)

显示如下:
function anonymous()
{
alert(this.id)
}

/*/虽然知道用法,但和上面一比较,发现如果,此处 this 代表anonymous 就会有问题

我曾就()问题专门法国一个贴子 http://expert.csdn.net/Expert/topic/1556/1556452.xml?temp=.9426538

现在()问题差不多明白。
*/





3、构造函数方法
function addItem(item)
{
this.item[this,items.length]=item; *//请看此处的this代表的是调用它的上一级mMenu ,why? */
return this.items.length-1
}

mMenu.prototype.addItem=addItem;



我用this已经很久了,但发现这个东西越来越不清楚,不同的时候代表的意义不一样。不知道为什么。

用function 和 Function 构造函数有什么不同?
aa=function{
alert("ttttttttttt")
}



aa=new Function(alert("ttttttttttt"))

又什么差别?

...全文
50 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jsidiot 2003-07-21
  • 打赏
  • 举报
回复
收藏
zhjzh_zjz 2003-04-08
  • 打赏
  • 举报
回复
有一篇确实不错,我自己在研究一下,thank you!
emu_ston 2003-04-08
  • 打赏
  • 举报
回复
呵呵,ATCG的帖子对于this这个关键字是讨论的没有你多,但是他在对象原理的讨论上还是比较深入的(不止我贴出来的那几贴)。

根据我的理解,constructor是系统已经定义了的构造方法,可以认为是真正的构造方法。而function是自定义的构造方法,可以认为是模拟的构造方法。虽然一样可以new,但是其实new functionName构造的是Function的对象,调用的是Function的构造方法,之后才调用自己定义的构造方法进行自定义的初始化过程,自定义的function看成是初始化方法更合适。

这个问题上的争论由来已久。资料上一般把自定义的function解释为是构造方法,我认为主要是为了方便理解,毕竟jser一般没有必要在这样的实现细节上过度纠缠。
zhjzh_zjz 2003-04-08
  • 打赏
  • 举报
回复
我看了一下ATCG的贴子。它的讨论还没我的深入呢。我想知道,基于原型的构造器构造函数的整个过程。constructor,function 之间的联系区别,我回去再好好研究一下 原版英文资料。有什么心得再发出来和大家共享。
emu_ston 2003-04-07
  • 打赏
  • 举报
回复
ATCG曾经多次深入讨论过这个方面,用论坛的搜索功能搜他发表过的帖子出来看看(关键字填一个空格,作者填ATCG)。

http://expert.csdn.net/Expert/TopicView1.asp?id=1240474
http://expert.csdn.net/Expert/TopicView1.asp?id=1265016
http://expert.csdn.net/Expert/TopicView1.asp?id=1240386
http://expert.csdn.net/Expert/TopicView1.asp?id=1251485
http://expert.csdn.net/Expert/TopicView1.asp?id=1247222
http://expert.csdn.net/Expert/TopicView1.asp?id=1245347
......


zhjzh_zjz 2003-04-07
  • 打赏
  • 举报
回复
有谁知道,确切含义,
nik_Amis 2003-04-07
  • 打赏
  • 举报
回复
up
wsj 2003-04-07
  • 打赏
  • 举报
回复
看看这个,绝对经典,绝对权威
http://devedge.netscape.com/library/manuals/2000/javascript/1.5/guide/obj2.html
zhjzh_zjz 2003-04-07
  • 打赏
  • 举报
回复
var myDate=new Date("2002\12\10")
alert(myDate.constructor);

//constructor=Date 即构造器、

此处,mainMenu 也是一个构造器。用构造器构造器实例(即 对象)大概也可以成为初始化过程吧
心云意水 2003-04-07
  • 打赏
  • 举报
回复
我觉得应该是对实例进行初始化……
zhjzh_zjz 2003-04-07
  • 打赏
  • 举报
回复
myMenu=new mainMenu() //new 调用该构造器。因该说此处调用这还是myMenu ,对吗?
myMenu.img="aaaaa";
myMenu.capture="bbbbb";
myMenu.hrefurl="#"

==

myMenu=new mainMenu("aaaaa","bbbbb",##) //new 调用该构造器。因该说此处调用这还是myMenu ,对吗?

zhjzh_zjz 2003-04-07
  • 打赏
  • 举报
回复
mainMenu 是一个对象构造器,用 new 就是来调用改构造器(constructor)来构造对象实例,按说,this 应该指该构造器,而不是他的实例。
心云意水 2003-04-07
  • 打赏
  • 举报
回复
to xuzuning(唠叨) :this永远指向“调用者”
那对于 mainMenu 这个对象,其调用这又是谁呢?是其本身??

对啊,因为使用的时候要new mainMenu
zhjzh_zjz 2003-04-07
  • 打赏
  • 举报
回复
to xuzuning(唠叨) :this永远指向“调用者”
那对于 mainMenu 这个对象,其调用这又是谁呢?是其本身??
心云意水 2003-04-07
  • 打赏
  • 举报
回复
可以这样理解
zhjzh_zjz 2003-04-07
  • 打赏
  • 举报
回复
String.prototype.trim = function()
{
// 用正则表达式将前后空格
// 用空字符串替代。
return this.replace(/(^\s*)|(\s*$)/g, "");
}

此处的 this 指 String

<script>
alert(this.name) //此处 this 指的是 window .I know.
</script>

如此就可以这样理解:
在对象中,this 代表这个对象本身
在方法中,this代表调用该方法的对象

是这样的吗???清明示
心云意水 2003-04-07
  • 打赏
  • 举报
回复
this.items[this.items.length]=item
//mainMenu对象的items[]中第this.items.length个元素赋值为item有什么难理解的吗?

由于addSub是mainMenu对象的方法,所以这里的this自然指mainMenu对象
xuzuning 2003-04-07
  • 打赏
  • 举报
回复
就这句理解对了:“//此处的this 指的时上级mMenu,即调用者。”
this永远指向“调用者”
zhjzh_zjz 2003-04-07
  • 打赏
  • 举报
回复
to xinyunyishui(心云意水):
this.item[this,items.length]=item 指的是上级,调用它的对象mMenu. 我都是这么用的。
我就是发现这儿有这个问题,才来问题。请看我的代码。

function mainMenu(img,capture,hrefurl){
this.items=new Array();
this.img=img;
this.capture=capture;
this.hrefurl=hrefurl;
}

function addSub(item){
this.items[this.items.length]=item;
}



function subMenu(img,capture,hrefurl,target){
this.img=img;
this.capture=capture;
this.hrefurl=hrefurl;
this.target=target;
}

mainMenu.prototype.addSub=addSub;

var myMenu=new mainMenu('#','收藏家','#')
mysub=new subMenu('#','#','#','blank')
myMenu.addSun(mysub);

alert(myMenu.items.length);

所以

function addSub(item){
this.items[this.items.length]=item;
}
//此处的this 指的时上级mMenu,即调用者。

//如果桌this值的时其 caller,
那上面 1、2 做何解释???




心云意水 2003-04-07
  • 打赏
  • 举报
回复
alert(btn.onclick)

显示如下:
function anonymous()
{
alert(this.id)
}
//这里的this表示btn这个对象,不是anonymous。

this.item[this,items.length]=item
//this仍然是自身不是上级。

最后的那个效果一样,但是后边的标准。

87,910

社区成员

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

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