对于昨日一个局部变量、局部函数问题的看法:
建议:不使用局部变量、局部函数,所有变量、函数都明显的使用this指针
function test_t()上面这段代码,输出6,6,这是正确的,但是,现在我们把(*)句处的注释去掉,则会输出6,4!这非常奇怪!
{
var v = 4 ;
this.m = function()
{
w() ;
alert( v ) ;
}
w = function()
{
v+=2 ;
alert( v ) ;
}
}
function start()
{
f = new test_t() ;
// t = new test_t() ; //(*)
f.m() ;
}
仔细分析一下,是由于在生成对象t的时候,重置了test_t()中的v为4了,故而this.m()中的v是重置后的v,而w()中的v却还是重置前的v
这说明在this.m中另生成了一个v,而这个v是各对象独有的,而m()中的v却是各对象共有的,这会使整个代码理解起来非常混乱,稍不注意就会分不清哪个函数中的变量是独有的,而哪个函数中的变量是共有的~~
因此,建议类中的任何东东必须显示的使用this,不要使用不属于对像的东东,使用任何东东的时候都必须显示的指明它属于什么对象(或作用域)

1 条评论:
这个类表现奇特,问题出在这里:
w = function()
{
v+=2;
alert(v);
}
原理这里有说道:
http://www.cnblogs.com/birdshome/archive/2005/01/26/97885.html
方法w在第一次new test_t()执行后,实际上是window.w了。所以出了你看到的异像:)
发表评论