如何创建一个无法从外部调用的函数?
var obj = {
function1: function(){
alert("function1");
},
function2: function(){
alert("function2...");
obj.function1();
}
};
// so how to make this function unaccessible
obj.function1();
// and you could only call this function
obj.function2();
Run Code Online (Sandbox Code Playgroud)
Dan*_*llo 23
您可能需要考虑使用Yahoo Module Pattern.这是一个单例模式,这些方法并不是静态的,但它可能正是您所寻找的:
var obj = (function () {
//"private" variables:
var myPrivateVar = "I can be accessed only from within obj.";
//"private" method:
var myPrivateMethod = function () {
console.log("I can be accessed only from within obj");
};
return {
myPublicVar: "I'm accessible as obj.myPublicVar",
myPublicMethod: function () {
console.log("I'm accessible as obj.myPublicMethod");
//Within obj, I can access "private" vars and methods:
console.log(myPrivateVar);
console.log(myPrivateMethod());
}
};
})();
Run Code Online (Sandbox Code Playgroud)
您可以定义您的私有成员myPrivateVar和myPrivateMethod定义,并在你的公共成员myPublicVar和myPublicMethod定义.
您可以按如下方式访问公共方法和属性:
obj.myPublicMethod(); // Works
obj.myPublicVar; // Works
obj.myPrivateMethod(); // Doesn't work - private
obj.myPrivateVar; // Doesn't work - private
Run Code Online (Sandbox Code Playgroud)
简单的答案是你不能两者都做.您可以创建"private"方法或"static"方法,但不能像在其他语言中那样创建专用静态函数.
您可以模仿隐私的方式是关闭:
function f() {
function inner(){}
return {
publicFn: function() {},
publicFn2: function() {}
}
}
Run Code Online (Sandbox Code Playgroud)
这里因为关闭,inner每次调用时都会创建函数,f公共函数可以访问此inner函数,但外部世界inner将被隐藏.
创建对象的静态方法的方法很简单:
function f() {}
f.staticVar = 5;
f.staticFn = function() {};
// or
f.prototype.staticFn = function() {};
Run Code Online (Sandbox Code Playgroud)
这里的函数对象f只有一个staticFn可以访问静态变量的函数,但实例中没有.
请注意,prototype版本将继承,而第一个版本不会.
因此,您要么创建一个不从实例访问任何内容的私有方法,要么创建一个静态方法,您不会尝试从外部访问.
| 归档时间: |
|
| 查看次数: |
10464 次 |
| 最近记录: |