2012-10-02 51 views
1

嗨,如何隱藏功能

我有我的主要文件,其中包括我的JavaScript文件。

在我的JavaScript文件,我有這個

$(document).ready(function(){ 

    //some functions here 

}); 

我想一切都只是提供給本頁面的功能,我知道你也可以按需要做這樣的事情

(function(){ 
$document.ready(function(){ 
//my functions 
)}; 
}).init(); 
還挺隱瞞的JavaScript的外面的世界

但我不是100%確定它將如何被調用,或者它是否是正確的方式。

任何人如果對此有所瞭解將會非常有幫助!

+4

您無法真正隱藏Javascript。訪問者的瀏覽器需要訪問它,如果瀏覽器可以訪問它,訪問者也可以訪問它。你可以把Javascript放在一個外部文件中,但這只是一個組織問題,而不是安全問題。你可以用各種方式壓縮代碼,以使它更多的是竊取任務,但據我所知,它可以全部撤銷。 – Dutchie432

+2

你究竟用「隱瞞」的意思是什麼?你的目標是什麼? – Philipp

+0

您是否在談論訪問修飾符?像「私人」,「公共」,「受保護」? – davehale23

回答

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 

}); 
0

就像第一個評論說的,你不能將它們隱藏起來,如果他們真的想看到它,他們會看到它。 可以清除它們的方式,如果你真的想,像

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

在文檔準備好你只需要調用

mySpace.init(); 

我不知道如果這是你想要的東西,但它是我明白這個問題的方式

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"); 
0

這聽起來像你正在尋找的是一個'javascript混淆器'。 Here就是一個例子。它使代碼更難讀取和複製。但正如其他人所說,你實際上不能完全隱藏javascript。

0

這裏的問題是,JavaScript是一個本質客戶端腳本語言,除非使用服務器端JavaScript應用程序,如node.js

只要以這種方式使用JavaScript,就可以下載整個代碼,就像從網站下載.txt文件一樣。唯一真正的區別是,「.js」擴展名及其包含在HTML <script>標記或AJAX調用中將強制用戶的瀏覽器將其呈現爲JavaScript。

但是,如果您想使腳本稍微難以找到,那麼這是可行的。我建議你的網站通過AJAX檢索腳本並將其附加到DOM。您可以使用require.js或使用Kickstrap並將您的腳本變爲「應用程序」來執行此操作。腳本不會在DOM中顯示爲鏈接,用戶將不得不搜索它。您可以通過腳本minifying使其更加困難(不會影響網站的完整性)。這會讓它運行得更快,同時無意中使其在前端不易讀取。

0

在JavaScript中只有函數作用域(try-catch中的異常參數是一個例外)。ES5將允許您使用let(無雙關語)來實現塊範圍,但它不會是有用的,直到大多數UA實現它。

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

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

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

你真的不能隱藏的功能,因爲它是由客戶端下載的文件的源代碼,但你可以把它使他們無法從JavaScript訪問功能。

(function() { 

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

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


})().init(); 
0

如果你在談論訪問修飾符像publicprivate等,然後檢查出的Javascript如何處理這個this article。以下是關鍵組件:

//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