程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> dom-JavaScript 參數this問題

dom-JavaScript 參數this問題

編輯:編程解疑
JavaScript 參數this問題
<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沒什麼作用**_

最佳回答:


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這門語言。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved