以下是我的理解 仅参考function show(){
this.a="1";//这里的this不一定指的是bb 是泛指 只要调用了这个方法 默认的调用者就是this
alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined" 因为此处只定义了 a 其它的还为定义。
show2();
function show2(){
this.b="2";
alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ...... (因为这里的a是调用show2者的 故现在还不存在,应该是bb.a就应该有了吧。这时show2只是函数,其它的类似)
show3();
function show3(){
this.c="3";
alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"
show4();
function show4(){
this.d="4";
alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined
}
}
}
}
var bb=new show();
如果你想让它显示
1undefinedundefinedundefined
12undefinedundefined
123undefined
1234那么把最后一句改成show();吧
这样就都是函数调用了.....
this.a="1";//这里的this不一定指的是bb 是泛指 只要调用了这个方法 默认的调用者就是this
alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined" 因为此处只定义了 a 其它的还为定义。
show2();
function show2(){
this.b="2";
alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ...... (因为这里的a是调用show2者的 故现在还不存在,应该是bb.a就应该有了吧。这时show2只是函数,其它的类似)
show3();
function show3(){
this.c="3";
alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"
show4();
function show4(){
this.d="4";
alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined
}
}
}
}
var bb=new show();
如果你想让它显示
1undefinedundefinedundefined
12undefinedundefined
123undefined
1234那么把最后一句改成show();吧
这样就都是函数调用了.....
解决方案 »
- 哪个手册中讲到window对象的external属性?
- 我不明白为什么第一行<div id="42" onclick="clicked(event)">1</div>可以嵌在script里,同时请帮忙补完程
- js制作双 二级联动 给分求帮助
- 问一个打印文书,打印顺序的问题
- select怎么会没有title 属性?
- 菜鸟问:这段代码应该怎样修改才合适?
- 关于showmodelessdialog,急!!!!!!!!!!!!!!
- 高手请看,100分
- 表单提交问题
- JS判断输入日期的正确性
- <SCRIPT LANGUAGE=javascript FOR=OA EVENT=NotifyCtrlReady> 这里面加入FOR 和 EVENT是什么意思?
- 怎样学习javascript啊,有没有速查手册之类的?菜鸟求教
function show(){
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"
show2();
function show2(){
this.b="2";
alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......
show3();
function show3(){
this.c="3";
alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"
show4();
function show4(){
this.d="4";
alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined
show5();
function show5(){
this.e="5";
alert(this.a+this.b+this.c+this.d+this.e);//显示 "undefined234" 为什么 this.a 都是 undefined
}
}
}
}
}
var bb=new show();
</script>
function show(){
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"
show2();
function show2(){
this.b="2";
alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......
show3();
function show3(){
this.c="3";
alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"
show4();
function show4(){
this.d="4";
alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined
}
}
}
}
var bb=new show();this.a 为实力bb
其余滴都是全局对象Global滴see:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD> <BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
function show(){
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"
show2();
function show2(){
this.b="2";
alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......
show3();
function show3(){
this.c="3";
alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"
show4();
function show4(){
this.d="4";
alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined
}
}
}
}
var bb=new show();
alert("-----------------" + this.a+this.b+this.c+this.d);
//-->
</SCRIPT>
</BODY>
</HTML>
var __method = this, args = Array.apply(null, arguments); args.shift();
return function() {
return __method.apply(object, args);
}
}
function show(){
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b);//显示"1undefinedundefinedundefined"
var show2 = function (){
this.b="2";
alert(this.a+this.b);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......
}.bind(this)
show2();
}
var bb=new show();
</script>
function show(){
var oThis = this
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b);//显示"1undefinedundefinedundefined"
show2();
function show2(){
oThis.b="2";
alert(oThis.a+oThis.b);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......
}
}
var bb=new show();
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<script type="text/javascript">
function show()
{
this.a="1";
window.a = "1";//这样,后面就能显示this.a了(后三个this实际指向window)
alert(this.a+" "+this.b+" "+this.c+" "+this.d);
if(this.alert)//因为alert实际是window.alert,所以可以用来判断是不是指向window
alert("show的this指向window");
show2();
function show2()
{
this.b="2";
alert(this.a+" "+this.b+" "+this.c+" "+this.d);
if(this.alert)
alert("show2的this指向window");
show3();
function show3()
{
this.c="3";
alert(this.a+" "+this.b+" "+this.c+" "+this.d);
if(this.alert)
alert("show3的this指向window");
show4();
function show4()
{
this.d="4";
alert(this.a+" "+this.b+" "+this.c+" "+this.d);
if(this.alert)
alert("show4的this指向window");
}//end show4
}//end show3
}//end show2
}//end showvar bb=new show();/*
结果可以看到,除了1,后面的this,指向的其实是window,在window作用域下,a当然是不存在的,所以后面三句,a一直是undefined
*/
</script>
</body>
</html>
this.c = "c";
(function(){alert(this.c)})();
}new b()试试就明白
如this.a 是实例化对象的成员,而 this.b...this.d 者是非实例化成员 ,因此 this.b...this.d 变量
都无法访问this.a 而由于它们之间都是 非实例化成员,所以它们之间可以互访.
所以得出的结果是:
"1undefinedundefinedundefined"
"undefined2undefinedundefined"
"undefined23undefined"
"undefined234"
可以改一下。
Function.prototype.bind = function(object)
{
var method=this;
return function() {
method.apply(object, arguments);
}
}
function show(){
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"
show2();//实际为window.show2();
function show2(){
this.b="2";//这个b为window.b;//因为a是另一个实例的,在该函数内和window对象中都找不到该变量,所以为undefine
alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......
show3();//实际为window.show3();
function show3(){
this.c="3";//window.c;在window对象中找到变量b
alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"
show4();
function show4(){
this.d="4";//window.d;
alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined
}
}
}
}
var bb=new show();
[/JScript]
C++中的this是指对象的本身
而
javascript中的this是没有规定指向谁的。function show(){
this.a="1";
}
var bb=new show();//这时this就指向 bb
show();//这时this就指向了window对象一般没有为函数指定调用者时,this指的都是全局对象(window)对象。
var _this = this
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b);
show2();
function show2(){
_this.b="2";
alert(_this.a+_this.b);
}
}
var bb=new show();
function show(){
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"
this.show2 = function (){
this.b="2";
alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......
this.show3=function (){
this.c="3";
alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"
this.show4=function (){
this.d="4";
alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined
}
this.show4();
}
this.show3();
}
this.show2();
}
var bb=new show();
function show(){
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"
show2();
function show2(){
this.b="2";
alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......
show3();
function show3(){
this.c="3";
alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"
show4();
function show4(){
this.d="4";
alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined
}
}
}
}
var bb=new show();
个人理解:谨记这句话关键字this总是指向调用该方法的对象
所以这里的第一个this应该都是指向bb
这样一来,就只有一点疑问
就是为什么其他的this.a都是undefined我们分析下this.a 是在方法里赋值的
而其他的都是在bb的内部的方法里定义的
这就是他们的差别,那么还有其他的差别吗?(可以再找找)
好了 找到一点差别 那我们就从这个差别入手我们在把这断代码改改,如下:function show2(){
this.b="2";
alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......
show3();
function show3(){
this.c="3";
alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"
show4();
function show4(){
this.d="4";
alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined
}
}
}
function show(){
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"
show2();
}
var bb=new show();结果和原来的一样
这样 我想大家就豁然开朗了
show2()下面的this表示的是show2()这个对象,或者说是传递给它的对象
所以以后的this.a 没有赋值,自然不存在然后你又会有疑问,你会问 那按照你说的 应该结果是如下:显示"1undefinedundefinedundefined"
显示 "undefined2undefinedundefined"
显示 "undefinedundefined3undefined"
显示 "undefinedundefinedundefined4" 别忘了你只实例化一个函数就是show()
试着把这个几个函数按照上面的方法分解
然后逐个实例化
看看结果会是如何
function show3(){
this.c="3";
alert(this.a+this.b+this.c+this.d);//显示 "undefined23undefined" 这里 为什么 不是 "undefinedundefined3undefined"
show4();
}
function show4(){
this.d="4";
alert(this.a+this.b+this.c+this.d);//显示 "undefined234" 为什么 this.a 都是 undefined
}
function show2(){
this.b="2";
alert(this.a+this.b+this.c+this.d);// 显示 "undefined2undefinedundefined" 为什么 this.a 是 undefined ......
show3();
}
function show(){
this.a="1";//我的理解是 这里的 this 指bb
alert(this.a+this.b+this.c+this.d);//显示"1undefinedundefinedundefined"
show2();
}
var bb=new show();
var bb2=new show2();
var bb3=new show3();
var bb4=new show4();
每个对象都只有自己的一个属性分别是a,b,c,d
结果是 show():this.a=1
show2():this.b=2
show3():this.c=3
show4():this.d=4这样或许你就明白了
我也没看懂其实show2之后的this就是window本身了
这样应该容易理解点
程序实际上是var a="wina",b="winb",c="winc"function show(){
this.a="1";//我的理解是 这里的 this 指bb
show2();
function show2(){
b="2";
show3();
function show3(){
c="3";
}
}
}var bb=new show();alert(a+b+c)这样或许容易理解点
实际上是修改了window的b c