通过方法传递数组

时间:2012-11-24 02:56:44

标签: javascript arrays parameter-passing

我做了很多调试,但似乎错误发生在我尝试在ae2Multi()中使用“this”。

<html><head>
<title>Custom</title>
<style type="text/css"></style>
<script type="text/javascript">
    function ae2(elementName) {
        var elementObject;
        var elementType = elementName.charAt(0);

        if(elementType == "#") {
            elementObject = document.getElementById(elementName.substr(1));
        } else if(elementType == ".") {
            elementObject = document.getElementsByClassName(elementName.substr(1));
        } else {
            elementObject = document.getElementsByTagName(elementName);
        }
        return elementObject;
    }

    function ae2Single() {
        this.innerHTML = "singleIsWorking";
    }

    function ae2Multi() {
        alert(this);
        for (var i = 0; i < this.length; i++) {
            this[i].innerHTML = "it really worked!";
        }
    }

    Element.prototype.ae2Single = ae2Single;
    Element.prototype.ae2Multi = ae2Multi;

    window.onload = function() {
        ae2(".container").ae2Multi();
    }
</script></head><body><div id="containerMain">hello world!</div><div class="container">hello again!</div><div class="container">hello yet again!</div></body</html>

2 个答案:

答案 0 :(得分:2)

当您选择多个元素时,您会获得NodeList,而不是Element。所以你需要编辑NodeList原型:

Element.prototype.ae2Single = ae2Single;
NodeList.prototype.ae2Multi = ae2Multi;

getElementById是唯一一个返回Element的人,而其他人则返回NodeList

答案 1 :(得分:0)

即使有人威胁要切断你的手,也不要增加原生物体的原型。

编辑:提供这个答案是因为你问“无论如何都要编写1个函数来同时执行这两个”

function ae2(elementName) {
    var elementObject;
    var elementType = elementName.charAt(0);

    if(elementType == "#") {
        elementObject = document.getElementById(elementName.substr(1));
    } else if(elementType == ".") {
        elementObject = document.getElementsByClassName(elementName.substr(1));
    } else {
        elementObject = document.getElementsByTagName(elementName);
    }

    if(elementObject.length === 1){
        //ae2Single
        elementObject.innerHTML = "singleIsWorking";
    }
    else if(elementObject.length > 1){
        //ae2Multi
        for (var i = 0; i < elementObject.length; i++) {
            elementObject[i].innerHTML = "it really worked!";
        }
    }

}