禁止用户在JavaScript中调用(特权)函数

时间:2017-03-08 20:00:26

标签: javascript browser private-members

有没有办法禁止在浏览器控制台中使用某些方法?假设我希望浏览器能够使用这些功能,而不是用户。

我正在尝试做一个(钱)柜台。这是我的代码:

// Counter declaration
var myCnt;

// Counter constructor
function Counter(initVal) {

    // Private variables
    var cnt = initVal;
    var that = this;

    // Privileged functions
    this.add = function (val) {
        switch (val) {
            case 1:
            case 2:
            case 5: cnt += val; break;
            default: alert("Wrong value!"); return;
        }
        return cnt;
    }

    this.show = function () { // Updates the value
        document.getElementById("cnt").innerHTML = cnt;
        return;
    }
}

/* // This self-invoking function gets the initial (last) value of the counter from an xml file.
(function loadLast() {
    var xml = new XMLHttpRequest(), container = document.getElementById("cnt");
    var theVal = 0;
    xml.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            theVal = parseInt(xml.responseXML.getElementsByTagName("Value")[0].firstChild.nodeValue);
            myCnt = new Counter(theVal);
            myCnt.show();
        }
    }
    xml.open("GET", "lastval.xml", true);
    xml.send();
})(); */

myCnt = new Counter(0); // Normally, this object is instantiated in the self-invoking function above
myCnt.show();
div#cnt {
    width: 100px;
    height: 100px;
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background-color: navy;
    color: white;
}
            
div#btn-container {
    width: 100px;
    height: 100px;
    position: relative;
}
<!DOCTYPE html>
<html>

    <head>
        <title>Money Box Counter</title>
    </head>
    
    <body>
        <div id="cnt"></div>
        <div id="btn-container">
            <button type="button" onclick="myCnt.add(1); myCnt.show();">+1</button>
            <br>
            <button type="button" onclick="myCnt.add(2); myCnt.show();">+2</button>
            <br>
            <button type="button" onclick="myCnt.add(5); myCnt.show();">+5</button>
        </div>
    </body>
</html>

那么,例如,有没有办法拒绝用户访问Counter.add方法而不将其设为私有?因此,只有客户或用户,但只能通过按钮,才能修改计数器。

我想过在arguments.callee.caller方法中使用Counter.add属性,但我读过这个不应该用作ES5。

另一个问题是,如果这是一个好习惯吗?我的意思是,我要做的是隐藏一些不应被用户自己使用的功能......

谢谢!并且有一个好的!

0 个答案:

没有答案