(function(){
var w=this;//为什么要使用w代替this,直接使用this不可以吗?为什么?
var o=w.hh=function(){//此处的hh属于哪一个对象?
return o.p //此处返回值为o.p,那不是就成了o=o.p了吗?对象等于他的属性???不理解......
};
})();
解决方案 »
- javascript 前景怎样???
- 求救高手,如何使用dsoframer打开word文档后如何替换文档里面的文字?
- jquery中ajax请求之参数url不能写绝对路径
- 如何让并排的div居中
- 多幅图片交替变换的效果,为什么同样的代码在有的机器上能正常显示在有的机器上显示不出来?代码如下:
- moo.fx.pack.js 的疑惑
- windows的api函数可以查MSDN,那么JavaScript的对象和方法可以在哪里查呢?
- 我作了个textarea ,如何用javascript取得这个文本区的值
- 用javascript的window.print()可以调用window内置的打印。ie有个打印预览功能,可否用javascript语句实现?
- 写完回复内容,点击回复之后,页面马上显示回复内容,急求代码
- getElementById()使用
- 请高手帮忙
2.var o = function(){return o.p}没什么问题啊,这里是函数声明,又没有执行,怎么就变成o=o.p了?(function(){
var w=this;//为什么要使用w代替this,直接使用this不可以吗?为什么
var o=w.hh=function(){//此处的hh属于哪一个对象?
return o.p; //此处返回值为o.p,那不是就成了o=o.p了吗?对象等于他的属性???不理解......
};
o.p = "hello world!";
alert(o());//hello world
})()alert(hh());//hello world
(function(){//这个匿名函数定义完毕之后被立即执行,这点楼主肯定明白。
var w=this;//这里这么写,我觉得是个人习惯,用w代替this(其实是window)
//然后对this的操作变成对w的操作,有时候理解起来要方便一些
var o=w.hh=function(){
return o.p;
};
//上面给window一个属性叫做hh,其实这个hh指向一个function.
//同时有一个局部变量o也指向这个函数。(先不管o.p返回什么);
o.p = 123;//给o一个属性p,并且赋值123,以方便测试。
alert('o:' + o);//这里测试发现o指向一个函数
})();
alert(window.hh);//这里测试发现给window添加一个属性叫做hh,hh指向一个函数。
alert(this.hh());//这里能够打印出闭包中的私有变量的属性。然而这个属性
//是无法通过其他手段获得到的。只有通过闭包返回的函数得到。
</script>
//总体来说,这段代码拿来学习还可以。要是在项目中写出来估计会被后来人骂死。
var o = function(){return o.p;}
也就是楼主说的那不是就成了o=o.p了吗?这里是比较难以理解。
要理解的就是函数也是对象。o是一个函数,同时o也是一个对象。是函数就可以被执行,使对象他就能够拥有其他的属性(比如p)。
给一个更简化的例子。<script>
var f = function(){
alert('i am a function. i was executed');
return "I am the function's return value";
};
f.attr = "i am the object f's property.";
alert(f);
alert(f());
alert(f.attr);
</script>
var o=w.hh=function(){
return o.p;
};
这样写应该更好看些:
var o;
w.hh = function(){return o.p};
str = str.length;
alert(str);这么写可以就等同于var str = new String('hello');
var n= 0;
n= str.length;
alert(n);
难道是牛人们又在玩啥游戏?非要用一个变量作为多个用途?
var o=w.hh=function(){
return o.p;
};//这里不是大材小用了吗?一般情况下o会有多个属性,这里只返回一个。
//那么o():就应该是返回它的属性了?
//还有一个疑问:那么它的其他属性怎样写?
var string = function(){
return string.value;
};
string.value = "abcd";
string.len = 4; //其它属性
alert(string()); //string有value,len...等属性,主要属性为value,所以string()只要value
<script>
window.name="凤凰的疑惑";//为了后面辨别this或w,做此赋值
(
function(s){ alert('参数已经正确传递进来,那就是 : "'+s+'"');//题外话
alert(this.name+'\n\n如果this.name是"凤凰的疑惑",那证明this是window对象');// var w=this;//不使用w代替this当然也可以,个人喜好.看看下面的变化就知道了// var o=w.hh=function(){//此处的hh属于window,也就是声明成为全局变量o
var o=this.hh=function(){//此处的hh属于window,也就是声明成为全局变量o
return o.p
//【1、那不是就成了o=o.p了吗?对象等于他的属性?】:此处是覆盖了o
//为证明这一点,你可以把return o.p变成return o,看看什么结果 //【2、关键是o.p在此之前并没有定义啊!他是在后面才定义的...】没调用o的时候前后定义有什么关系?仅仅是定义而已 };
o.p=12345;
o.h="aaaaaaaaaaaaaaaaaaaaaaaaa"
var z=new o();//这里调用o函数
alert(z);
alert(z.h)
//alert(o.p)
}
)('我是测试题目的参数');alert(hh)/*这里直接调用hh的构造*/
alert(hh())/*这里直接调用hh的函数*/
//alert(o)//当然报错为空</script>