JavaScript语法问题:关于function里的this和with

hax 2002-11-14 05:49:14
在java里,在函数里访问成员变量只要直接用变量名,除非与参数或局部变量有冲突的时候可以显式的用“this.成员变量名”来访问。而在javascript里,因为并没有类,所以总是用“this.成员变量名”来访问。

另一方面,使用 with(object) {} 的语法,可以使得访问复杂的对象的代码变得简洁明了。

然而,没有办法写以下的语句:

function example ()
{
with (this) {
a = 1;
b = a + 1;
c = b + 1;
}
}

而必须写成:

function example ()
{
this.a = 1;
this.b = this.a + 1;
this.c = this.b + 1;
}

有时候,当频繁访问成员变量时,写“this.”就成了额外的负担。


不知道大家是如何处理这一问题的呢?
...全文
25 点赞 收藏 10
写回复
10 条回复
runmin 2002年11月15日
在function里

如果你不this.*****指定他是一个属性怎么知道它是一个变量还是一个属性呢?声明一下就好用。毕竟javascript。。。。

<script>
function example ()
{
var a = "asdf";
this.b = "asdf"
with (this)
{
a = "ds";
b = "ds";
}

return a;
}

alert(example());
var t=new example()
alert(t.a);
alert(t.b);
</script>
回复 点赞
qiushuiwuhen 2002年11月15日
<script>
function example ()
{
this.a=this.b=this.c=0
with (this) {
a = 1;
b = a + 1;
c = b + 1;
}
}

var t=new example()
alert(t.a);alert(t.b);alert(t.c)
</script>
回复 点赞
missRainbowAgain 2002年11月15日
up,学习中^^^^
回复 点赞
ALAN_1999 2002年11月15日
关注
回复 点赞
Lostinet 2002年11月15日
对哦。.
还有个要说..
对于不明来历的Object,不要随便用with,..
虽然也没有多少不明来历的Object...
回复 点赞
wangxj0600 2002年11月15日
应该是可以的。
回复 点赞
saintKnight 2002年11月15日
能否这样写?
function example(arg){
with(arg){
a=1;
this.b=this.a+1;
this.c=this.b+1;
}
}
而在调用时使用example(this)的方法
回复 点赞
Lostinet 2002年11月15日
顺便问问。.你有多少可用分啊,,给点我吧...
:)
回复 点赞
Lostinet 2002年11月15日
我个人认为with比较危险,而且性能也应该会低.
除了明确知道对象是有某个属性,那么用with是个好办法。
(我认为好只是可以省变量的定义)
例如:
下面就可以不用定义新的变量了。
with(new Enumerator(document.all))
for(;!atEnd();moveNext())
{
if(item().className.toUpperCase()=="MYELEMENT")
HandleMyElement(item());
}


但是如果对于Object的Expando属性,并且该属性还不一定已经添加到object中
例如:

var totali=0;
objs=[{i:4},{i:5},{}];//最后一个i是没有添加的
for(var i=0;i<objs.length;i++)
with(objs[i])
{
totali+=i;//好在for循环中的i就在前面,容易看到有问题.
//如果with引用的对象和使用的属性都是外部的.
//那么就不容易发现错误了。
//这种错误会不小心把全局(或外部)的变量引用上,
//有时还会更改外部的变量的值。使程序发生错误。
}

----------------------
with和this没有什么关系.
只是有时想着,如果能像C++那样,在方法内不写this就好了。
不过我觉得JScript那样更好。
起码如果真有this属性和全局变量的名字有冲突,
JScript是没有 ::globalVar 的引用的。
回复 点赞
hax 2002年11月15日
My god! 200分没有人要?

虽然这个问题我研读文档后已经想明白了。
回复 点赞
发动态
发帖子
JavaScript
创建于2007-09-28

5.1w+

社区成员

22.3w+

社区内容

Web 开发 JavaScript
社区公告
暂无公告