如何隐藏功能

时间:2012-10-02 14:51:16

标签: javascript jquery javascript-framework

您好,

我有我的主文件,其中包含我的javascript文件。

在我的javascript文件中,我有这个

$(document).ready(function(){

  //some functions here

});

我想要这个页面可用的所有功能,我知道你可以通过做类似的事情将它们隐藏到javascript的外部世界

(function(){
$document.ready(function(){
//my functions
)};
}).init();

但我不是100%确定如何调用它或者它是否正确的方式。

任何阐明这一点的人都会有很大的帮助!

8 个答案:

答案 0 :(得分:1)

在javascript中,函数内部声明的所有内容仅在该函数内可用(除非在声明不带关键字var的变量时)。

因此,传递给$()。ready()的函数内部的所有内容仅在该函数内可用。

$(document).ready(function () {
    //all code here is scoped inside this function, so it can't be accessed
    // outside of this function

}); 

答案 1 :(得分:0)

就像第一条评论所说,你无法将它们隐藏起来,如果他们真的想看到它,他们就会看到它。 如果你真的想要,可以用某种方式清理它们,比如

var mySpace = {};
mySpace.init = function() {
    // your init functions here
};

在doc准备就绪,你只需致电

mySpace.init();

我不确定这是否是您想要的,但这是我理解问题的方式

答案 2 :(得分:0)

(function(){
    var secret1 = function(msg) {console.log("Secret Message:" + msg);}
    $document.ready(function(){
        secret1("this can only be called from within");
    )};
})();
secret1("this will cause a script error");

答案 3 :(得分:0)

听起来你正在寻找的是一个'javascript混淆器'。 Here就是一个例子。它使代码更难以阅读和复制。但正如其他人所说,你实际上无法完全隐藏javascript。

答案 4 :(得分:0)

这里的问题是JavaScript本质上是一种客户端脚本语言,除非使用node.js等服务器端javascript应用程序。

只要以这种方式使用JavaScript,就会下载整个代码,就像从网站下载.txt文件一样。唯一真正的区别是“.js”扩展名及其包含在html <script>标记或AJAX调用中会强制用户的浏览器将其呈现为JavaScript。

但是,如果您想让脚本更难以找到用户,那么这是可行的。我建议您的网站通过AJAX检索脚本并将其附加到DOM。您可以使用require.js或使用Kickstrap并将您的脚本变为“应用”来执行此操作。该脚本不会显示为DOM中的链接,用户真的必须搜索它。您可以通过minifying脚本使其变得更加困难(不会损害您网站的完整性)。这将使其运行速度更快,同时无意中使其在前端的人性化程度降低。

答案 5 :(得分:0)

在JavaScript中只有函数作用域(try-catch中的异常参数是一个例外)。 ES5将允许您使用let(没有双关语)来实现块范围,但它不会有用,直到大多数UA实现它。

所以你的功能是隐藏在外面的世界,如果在外面,你的意思是在dom准备好的事件之外。

$( document ).ready( function () {
    var myFunc = function () {};
} );

myFunc();// <- ReferenceError: myFunc is not defined

答案 6 :(得分:0)

您无法真正隐藏这些功能,因为它位于客户端下载的文件的源代码中,但您可以使其无法通过javascript访问您的功能。

(function() {

    var doStuff = function() {
        // Not Accessible
        console.log('You can\'t reach me!');
    }

    return {
        'init': function() {
            // Accessible
            doStuff();
        }
    }


})().init();

答案 7 :(得分:0)

如果您正在讨论publicprivate等访问修饰符,请查看this article有关Javascript如何处理此问题的信息。以下是关键组件:

//constructor function (class)
function Maths(x, y) {
//public properties
    this.x =x;
    this.y = y;

    //public methods
    this.add = function () { _sum = x + y; return _sum; }
    this.mod = function () { _mod = x % y; return _mod; }

    //public method calls private method
    this.show = function () {
    this.add();
    this.mod();
    showResult();
}

//private variables
var _sum=0;
var _mod=0;

//private methods
function showResult() {
    alert( "sum: " + _sum + ", mod: " + _mod );
}

}
//end function

//create instance
var plus = new Maths(3, 4);
plus.show();

//static method multiply, you can use it without instance of Maths
Maths.multiply = function (x,y) {  return x * y; }

//call static method by constructor function (class) without instance of Maths
var result = Maths.multiply(5,7);
alert(result);
//output: 35