javascript中的私有静态函数
如何创建不能从外部调用的函数javascript中的私有静态函数,javascript,Javascript,如何创建不能从外部调用的函数 var obj = { function1: function(){ alert("function1"); }, function2: function(){ alert("function2..."); obj.function1(); } }; // so how to make this function unaccessible obj.function1(); // and
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();
<>你可能想考虑使用。这是一个单例模式,方法不是真正静态的,但它可能是您所寻找的:
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());
}
};
})();
您可以在定义了myPrivateVar
和myPrivateMethod
的地方定义私有成员,在定义了myPublicVar
和myPublicMethod
的地方定义公共成员
您只需访问公共方法和属性,如下所示:
obj.myPublicMethod(); // Works
obj.myPublicVar; // Works
obj.myPrivateMethod(); // Doesn't work - private
obj.myPrivateVar; // Doesn't work - private
你可以使用一个闭包,类似于
var construct = function() {
var obj = {};
var method1 = function() {
alert("method1");
}
obj.method2 = function() {
alert("method2...");
method1();
}
return obj;
}
obj = construct();
然后:
obj.method2
可访问,但obj.method1
不存在供公众使用。只能使用类的成员函数访问它。简单的答案是,不能同时执行这两个操作。您可以创建“private”
方法或“static”
方法,但不能像在其他语言中那样创建私有静态函数
模拟隐私的方法是:
这里由于闭包,每次调用f
时都会创建内部
函数,公共函数可以访问此内部
函数,但对于外部世界,内部
将被隐藏
创建对象静态方法的方法很简单:
function f() {}
f.staticVar = 5;
f.staticFn = function() {};
// or
f.prototype.staticFn = function() {};
这里,函数对象f
只有一个staticFn
,可以访问静态变量,但不能从实例中访问
请注意,原型
版本将被继承,而第一个版本不会
因此,您要么创建一个不从实例访问任何内容的私有方法,要么创建一个不尝试从外部访问的静态方法。
对象可以由构造函数生成,构造函数是初始化对象的函数。构造函数提供类在其他语言中提供的特性,包括静态变量和方法
请在上阅读所有相关内容,您可以这样做:
var obj = new function() {
var method1 = function() { // private }
this.method2 = function() { // public }
}
obj.method1(); // not possible
obj.method2(); // possible
注意,我还使用匿名构造函数。这有点类似于单例模式 也许您希望代理对象只包含公共方法,例如
var obj = (function() {
var obj = {
method1: function(){
alert("method1");
},
method2: function(){
alert("method2...");
obj.method1();
}
}
return {
method2: function() { return obj.method2.apply(obj, arguments) }
}
})()
// you could only call this function
obj.method2();
// this function inaccessible
obj.method1();
我看不出javascript中私有方法的意义。如果你不希望人们调用某个方法,那么就不要宣传它。私有方法也会使调试变得更加困难 这才是真正应该做的
var MyClass = new(function() {
var privateStaticVariable = '';
function privateStaticMethod() {
}
function construct() {
var self = this;
this.publicMethod = function() {};
function privateMethod() {
//maybe lest use our private static method
privateStaticMethod();
}
}
construct.publicStaticVariable = '';
construct.publicStaticMethod = function() {};
return construct;
})();
Now lets use it:
var myClass = new MyClass();.....
MyClass.publicStaticMethod();
MyClass.publicStaticVariable = 'sfdsdf';
myClass.publicMethod();
…使用
类。尽管有些功能仍然没有按要求提供
const instance=new(类Alpha{
静态#私有_静态_方法(){
console.info(“我是私有的和静态的。”);
}
静态公共\静态\方法(){
Alpha.#private_static_method();
console.info(“我是公共的和静态的。”);
}
#私有非静态方法(){
console.info(“我是私有的、非静态的。”);
}
公共非静态方法(){
这是.#private_nonstatic_method();
console.info(“我是公共的,非静态的。”);
}
});
instance.constructor.public_static_method();
//instance.constructor.#private_static_method();//不可能的
instance.public_nonstatic_method();
//实例.#private_nonstatic_method();//不可能
myPrivateMethod不是“静态”函数。你错过了标题。我不相信雅虎对模块模式有任何权利;)@新月号:我也不知道,但大家似乎都这么叫它。。。也许我应该说“模块模式,也就是Yahoo模块模式或YUI模块模式”:)我相信这个模式起源于YahooYUI团队的Eric Miraglia在一篇文章中提到:你想要静态函数还是静态方法?你希望它是静态的吗?(示例未阐明)静态方法和函数之间的区别是什么(顺便说一句,很抱歉使用这两个词)我想问题是javascript是否有静态方法f.prototype.staticFn
实际上只是prototype对象的公共实例成员。它只是静态的,因为作为不同对象实例的成员,它无权访问此实例的私有成员。您也可以使用私有方法来实现这一点——只需给原型实例一个私有方法——这是没有帮助的,因为子实例无法访问该方法。简而言之,javascript中没有静态方法。
var MyClass = new(function() {
var privateStaticVariable = '';
function privateStaticMethod() {
}
function construct() {
var self = this;
this.publicMethod = function() {};
function privateMethod() {
//maybe lest use our private static method
privateStaticMethod();
}
}
construct.publicStaticVariable = '';
construct.publicStaticMethod = function() {};
return construct;
})();
Now lets use it:
var myClass = new MyClass();.....
MyClass.publicStaticMethod();
MyClass.publicStaticVariable = 'sfdsdf';
myClass.publicMethod();