<script type="text/javascript">
var get = {
byId: function(id) {
return document.getElementById(id)
},
byClass: function(sClass, oParent) {
var aClass = [];
var reClass = new RegExp("(^| )" + sClass + "( |$)");
var aElem = this.byTagName("*", oParent);
for (var i = 0; i < aElem.length; i++) reClass.test(aElem[i].className) && aClass.push(aElem[i]);
return aClass
},
byTagName: function(elem, obj) {
return (obj || document).getElementsByTagName(elem)
}
};
window.onload = function ()
{
var oNav = get.byId("nav");
var aLi = get.byTagName("li", oNav);
var aSubNav = get.byClass("subnav", oNav);
var oSubNav = oEm = timer = null;
var i = 0;
for (i = 1; i < aLi.length; i++)
{
aLi[i].onmouseover = function ()
{
//隐藏所有子菜单
for (i = 0; i < aSubNav.length; i++)aSubNav[i].style.display = "none";
//获取该项下的子菜单
oSubNav = get.byClass("subnav", this)[0];
//获取该项下的指示箭头
oEm = get.byTagName("em", this)[0];
//显示该项下的子菜单
oSubNav.style.display = "block";
//判断显示区域
oNav.offsetWidth - this.offsetLeft > oSubNav.offsetWidth ?
//如果在显示范围居左显示
oSubNav.style.left = this.offsetLeft + "px" :
//超出显示范围居右显示
oSubNav.style.right = 0;
//计算指标箭头显示位置
oEm.style.left = this.offsetLeft - oSubNav.offsetLeft + 50 + "px";
clearTimeout(timer);
//阻止事件冒泡
oSubNav.onmouseover = function (event)
{
(event || window.event).cancelBubble = true;
clearTimeout(timer)
}
};
aLi[i].onmouseout = function ()
{
timer = setTimeout(function () {
oSubNav.style.display = "none"
},300)
}
}
};
</script>
**_var aElem = this.byTagName("*", oParent);
这句的意思是获取oParent下的所有标签
但这句中的this指向的对象是什么?,我感觉this没什么作用**_
JavaScript 参数this问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 非二 2016-12-11 13:45关注
this总指向是调用函数的对象。_
byTagName这个函数的定义在get对象的下面,调用的时候需要用get.byTagName来调用。而byClass也是定义在get下面的函数,调用的时候必须通过get.byClass 来调用。
在byClass中又调用了get.byTagName函数,调用byClass和调用byTagName的对象相同都是get对象,所以文中利用了this关键字替换掉了getget.byTagName的get对象。
我觉得涉及到了函数的优化,因为如果在get.byClass中直接写get.byTagName,js还有去寻找get这个对象,而直接有this关键字就简化了这一过程。
不知道是不是这样,请大咖们指出错误,让我们一起学习js这门语言。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥30 dspbuilder中使用signalcompiler时报错Error during compilation: Fitter failed,求解决办法
- ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
- ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
- ¥15 知识蒸馏实战博客问题
- ¥15 用PLC设计纸袋糊底机送料系统
- ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
- ¥15 用C语言输入方程怎么
- ¥15 网站显示不安全连接问题
- ¥15 51单片机显示器问题
- ¥20 关于#qt#的问题:Qt代码的移植问题