试图在JS中创建私有函数

时间:2016-03-03 07:50:00

标签: javascript

我是javascript的新手..我正在尝试在JS中创建一个私有函数并在外面访问它..这是我的代码



 function Person(name, gender) {
   this.name = name;
   this.gender = gender;

   //the private function
   function aFunction(arg1) {
     alert("anything");
   }

 }

 var person = new Person("bob", "M");


 person._privates['aFunction']();




3 个答案:

答案 0 :(得分:1)

  

我正在尝试在JS中创建一个私有函数并在

之外访问它

首先,这个语句是oxymoron,因为私有函数根据定义是私有的,因此不应该在外部访问。

如果您想要访问其中Person内定义的方法,那么 - > 会尝试让Person班级有_privates会员

function Person(name, gender){
   this.name = name;
   this.gender = gender;

   this._privates = {}; //new property added to access private functions

   //the private function       
   this._privates.aFunction = function (arg1){
       alert("anything");
   };
}

答案 1 :(得分:1)

首先,如果你想让外面的私人方法可以访问,那么它不再是私有的吗?

但回答你的问题是保留私有方法:aFunction()。

您需要有一个特权方法来访问它才能触发它。

 function Person(name, gender) {
   this.name = name;
   this.gender = gender;

   //the private function
   function aFunction(arg1) {
     alert("anything "+arg1);
   }

   this.nonPrivateFunction = function(param) {
     aFunction(param);
   }

 }

 var person = new Person("bob", "M");


 person.nonPrivateFunction("test");

请记住,此特权可以被另一个方法覆盖,但方法代码本身不能更改。

要覆盖这样做,但是您将无法访问私有功能

person.nonPrivateFunction = function() {
   console.log("overridden")
}

答案 2 :(得分:0)

你可以试试这个:

function Person(name, gender){
   this.name = name;
   this.gender = gender;

   //the private function
   this.aFunction = function(arg1){
       alert("anything");
   }       
}

var person = new Person("bob", "M");  

person.aFunction();

demo