<script language="javascript" >
// 疑问一:
function test()
{
var mytest = "!!!!!!!!!!";
//正确的声明:
//
this.mytest = "!!!!";//这里this是调用test方法的对象,没有对象调用的话就是默认window对象了
alert(this.location);
alert(this.mytest)
alert(window.mytest)
//
}
test()
// 不解? 假设function是对象,为什么var mytest后,this.mytest未定义?
</script>
// 疑问一:
function test()
{
var mytest = "!!!!!!!!!!";
//正确的声明:
//
this.mytest = "!!!!";//这里this是调用test方法的对象,没有对象调用的话就是默认window对象了
alert(this.location);
alert(this.mytest)
alert(window.mytest)
//
}
test()
// 不解? 假设function是对象,为什么var mytest后,this.mytest未定义?
</script>
// this.myobj = new Object(); //定义一个新对象,并返回!
这里只是定义了一个属性是一个新的对象,而并不是重新的对象
var myobj = new Object();//这样写就可以了
// var testvar = "????";
// alert(this.testvar); //这里的结果是 ????
这里定义的是一个变量,而并不是一个属性//其实都差不多,你先把他想成一个树,window对象是根,其他定义的方法和变量都是他的叶子,方法内部定义的只是调用这个方法的对象的叶子。一起想确实很不容易理解的,慢慢来
<script language="javascript" >
var testvar1="????"
function test()
{
var testvar2 = "????";
alert(this.testvar1); //这里的结果是 ????
alert(this.testvar2); //这里的结果是 undefined
}
test()</script>
// function test()
// {
// var mytest = "!!!!!!!!!!";
// 正确的声明: this.mytest = "!!!!";
// alert(this.mytest);
// }
// 不解? 假设function是对象,为什么var mytest后,this.mytest未定义?
解答:
在函数里用 var 声明的当成 private成员,用this.XXX声明的是 public成员,就算变量名一样,但是这两个也是不同的变量
运行一下下面的例子就知道了
//----------------------------------------------------------
function a() {
var b = 'var b';
this.b = 'this.b';
this.show1 = function() {
alert(b);
};
this.show2 = function() {
alert(this.b);
};
}
new a().show1();
new a().show2();
//---------------------------------------------------------- 这个例子就类似这样
类 a 有 两个成员变量和两个成员函数,其中的一个成员变量为私有,另外的一个成员变量和成员函数都是公有(在类的实例化对象中可用) // 疑问二:
// function tone()
// {
// this.myobj = new Object(); //定义一个新对象,并返回!
// this.testvar = "!!!!!";
// myobj.myfunction = function()
// {
// alert(this.testvar);
// }
// return myobj;
// }
// function test()
// {
// var tobj = new tone();
// tobj.myfunction();
// }
// 不解? IE提示,myobj未定义?为什么? 解答:
同第一个疑问,用this声明的是公有变量,你下面的 myobj.myfunction 当然不对了,因为你没有声明这个myobj,必须 var myobj其实定义一个空对象不一定要用 new Object()可以用这个“{}”代替 即this.myobj ={};
// 疑问三:
// function tone()
// {
// var myobj = new Object(); //定义一个新对象,并返回!
// var testvar = "!!!!!";
// myobj.myfunction = function()
// {
// var testvar = "????";
// alert(this.testvar); //这里的结果是 ????
// }
// return myobj;
// }
// function test()
// {
// var tobj = new tone();
// tobj.myfunction();
// }
解答:
这里你是不是看错了啊,明明alert出来的是“undefined”啊
// 疑问四:
// function test()
// {
// var mytext = "!!!!";
// alert(this.mytext); //未定义? WHY? 难道mytext不是对象级吗?
// }
// function test()
// {
// this.mytext = "!!!!";
// alert(this.mytext); //正确,没问题!
// }
// function test()
// {
// mytext = "!!!!";
// alert(this.mytext); //正确,为什么有var就不行了?
// }
// function test()
// {
// this.mytext = "!!!!";
// alert(mytext); //正确! 但是和下面比较又有什么不同?
// }
// function test()
// {
// var mytext = "!!!!";
// alert(mytext); //正确! 但是和上面比较又有什么不同?
// }
// 上面的例子其实表明了
/*
在function的对象级内, this.mytext == mytext
又
var mytext == mytext
但是
this.mytext != var text
这是为什么?
*/
// function test()
// {
// this.mytext = "???";
// var mytext = "!!!";
// alert(mytext); //打印 !!!
// alert(this.mytext); //打印 ???
// // 这里其实否定了
// // function test()
// // {
// // this.mytext = "!!!!";
// // alert(mytext); //正确! 但是和下面比较又有什么不同?
// // }
// // 这个方法,这个方法却是正确的??? 奇怪否?
// }
function test()
{
var mytext = "!!!!";
this.mytext = "???";
alert(mytext + ', ' + this.mytext + ', ' + window.mytext);
//window应该是test更外层的对象吧,那么为什么window.mytext居然和this.mytext相同?
//如果这样的话,那不是正好又混淆了,function(){function()}的this解释吗?
}
解答:
这个搞不懂了,this是让继承或者实例化类用的,没有继承或者实例化的对象你用this干嘛
this.XXX.......
}如果不实例化 test,直接运行 test的话,就相当于
运行window.test();
所以test里的 this,指的是 window