解决方案 »
- 关于在FF下获取iframe里面的dom元素对象
- 用Jquery做弹出提示的问题
- 这个数组如何调用?
- 火狐 外部的JS文件要怎么获取框架“main”,中的表单“bottom123”在;
- 省市县ajax联动验证问题---验证表单触发事件问题
- 难!!!!!!为什么有的主页的源码看不到?请问是怎样用JS实现的呀?????
- 怎么用javascript保存当前网页为html文件
- 用javascript做点击“下页”/“上页”在本htm内变化图片的图象浏览功能?
- 用脚本将焦点定位到一个文本框后,怎样将光标定位到这个文本框里的字符串的末尾?(在线等待)
- 怎样加入插入图片的功能??
- js判断过后保留控件内容
- 感觉有点困难的JS实现问题
看样是还是闭包的原因 有两种方案 貌似下面的那种 立即执行一函数 改变this的作用域的方式 是一种还有一种就是 通过给对象添加需要的参数 然后再 函数里面使用这个参数 相当于是给 当前对象绑定 你所需要的参数 之类
//因为我想调用外部定义的startAction函数,所以不得不使用闭包
self.startAction(oLis[this.index] , {"opacity":100});
// 这里出现了问题!这里的this指向的不是 oLables[i],所以this.index实际上undefined,我打印了this输出结果是:window...
}(this);
最后面的(this)有啥作用?
NavBar.prototype.init = function(){
var _startAction ==this.startAction;
for(var i = 0 ; i < this.showLength; i++)
{
oLi[i].index = i;
oLables[i].onmouseover = function(self){
_startAction(oLis[this.index] , {"opacity":100});
};
}
}
用一个局部变量保存外层函数的this指向就可以了
NavBar.prototype.init = function(){
var _this=this;
for(var i = 0 ; i < this.showLength; i++)
{
oLi[i].index = i;
oLables[i].onmouseover = function(){
_this.startAction(oLis[this.index] , {"opacity":100});
}
}
}
这种写法表示定义函数后立即执行,后面的括号里面自然是参数,this对应self参数
这个东东写和不写,区别在哪里?
我做了个小例子去帮助自己理解,i=0时无错,但后面就报错:尚未实现
//因为我想调用外部定义的startAction函数,所以不得不使用闭包
self.startAction(oLis[this.index] , {"opacity":100});
// 这里出现了问题!这里的this指向的不是 oLables[i],所以this.index实际上undefined,我打印了this输出结果是:window...
}(this);
应该是:oLables[i].onmouseover = (function(self){
self.startAction(oLis[this.index] , {"opacity":100});
})(this);
//this值传给self供闭包函数内用。不过我建议传i进去更好。oLables[i].onmouseover = (function(n){
oLables[n].startAction(oLis[n] , {"opacity":100});
})(i);
所以他想将外层函数的this作为参数传进函数调用
但这儿他这么写是错误的,定义函数后立即执行,xxx.onmouseover=function(){}()得到的实际是该函数的返回值才对,函数没有返回值,所以他的oLables[i].onmouseover得到的值应该是undefind