特權方法就是有權訪問私有變量和私有函數的公有方法:函數
function MyObject(){ var privateVariable = 10; function privateFunction(){ return false; } this.publicMethod = function(){ privateVariable ++; return privateFunction(); }; } var x = new MyObject(); console.log(x.publicMethod()) ;//false
私有做用域中定義私有變量和函數,一樣也能夠建立特權方法,如:this
(function(){ var privateValue = 10; function privateFunction(){ return false; } MyObject = function(){}; //沒有var 屬於全局變量,嚴格模式下會報錯 MyObject.prototype.publicMethod = function(){ privateValue ++; return privateFunction(); }; })(); var instance = new MyObject(); console.log(instance.publicMethod());
這裏就能夠看出實際上就是在私有做用域中定義了一個全局的構建函數;其中的一個方法就是返回私有做用域中的一個私有變量和屬性。寫成下面這樣就能夠更好地瞭解:prototype
Obj = function(){}; (function(){ var x = 10; function y(){ return x + 10; } Obj.prototype.say = function(){ console.log(y()); }; })() var ins = new Obj(); ins.say();