javascript中的私有成员
任何人都可以告诉我如何使用或声明javascript中的私有成员。我会很感激举个例子。我是新来的私有成员是由构造函数生成的。构造函数的普通变量和参数成为私有成员javascript中的私有成员,javascript,Javascript,任何人都可以告诉我如何使用或声明javascript中的私有成员。我会很感激举个例子。我是新来的私有成员是由构造函数生成的。构造函数的普通变量和参数成为私有成员 function Container(param) { this.member = param; var secret = 3; var that = this; } function Container(param) { this.member = param; var secret = 3;
function Container(param) {
this.member = param;
var secret = 3;
var that = this;
}
function Container(param) {
this.member = param;
var secret = 3;
var that = this;
}
此构造函数生成三个私有实例变量:param、secret和that。它们附加到对象,但外部无法访问它们,对象自身的公共方法也无法访问它们。它们可以被私有方法访问。私有方法是构造函数的内部函数
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
}
您可以在上找到更多详细信息。道格拉斯·克罗克福德有一篇关于:
私有成员由构造函数生成。构造函数的普通变量和参数成为私有成员
function Container(param) {
this.member = param;
var secret = 3;
var that = this;
}
function Container(param) {
this.member = param;
var secret = 3;
var that = this;
}
此构造函数生成三个私有实例变量:param、secret和that。它们附加到对象,但外部无法访问它们,对象自身的公共方法也无法访问它们。它们可以被私有方法访问。私有方法是构造函数的内部函数
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
}
私有方法dec检查secret实例变量。如果大于零,则递减secret并返回true。否则返回false。它可用于将此对象限制为三种用途
按照惯例,我们将该变量设为私有变量。这用于使对象对私有方法可用。这是ECMAScript语言规范中错误的解决方法,该错误导致内部函数的错误设置
私有方法不能由公共方法调用。为了使私有方法有用,我们需要引入特权方法。这里有一种方法:
function TheClass() {
var _this = this;
var privateMember = 'foo';
this.publicMember = 'bar';
var privateMethod = function(){
// things happen here
};
this.publicMethod = function(){
//other things here
_this.publicMember = 'sparky';
return privateMember;
};
}
var myObj = new TheClass();
alert(myObj.privateMember); //won't work
alert(myObj.publicMember); //should work
alert(myObj.publicMethod()); //should work too
看看这个,玩一下;) JavaScript没有私有变量。在JS中,变量的作用域位于最近函数的顶部。因此,创建函数(或闭包)是使私有变量只能在该范围内访问的一种方法。需要记住的重要一点是始终使用
var
来声明变量,否则,即使在函数内部,变量也会变为全局变量,这很糟糕
如果您使用的是原型继承,那么创建构造函数就很容易了,使用var
声明的任何变量都将是私有的,使用声明的任何变量都将是公共的
function Bar() {
var foo = ''; // private
this.baz = function() {}; // public
}
var bar = new Bar(); // create new instance of Bar
alert(bar.foo); // error
alert(bar.baz); // function
此外,上面的构造函数非常简单,通常您会将函数方法放在对象的实际prototype
上,如Bar.prototype.baz=function(){}
例如,如果您使用的是单例,则可以使用模块模式:
var bar = (function(){ // bar is public
var foo = ''; // foo is private
function baz() {}; // baz is private
return {
baz: baz // expose 'baz' as a public member of 'bar'
}
}());
alert(bar.foo); // error
alert(bar.baz); // function
你可以试试这个
此包将按实例保存成员
const pvt = require('private-members');
const _ = pvt();
let Exemplo = (function () {
function Exemplo() {
_(this).msg = "Minha Mensagem";
}
_().mensagem = function() {
return _(this).msg;
}
Exemplo.prototype.showMsg = function () {
let msg = _(this).mensagem();
console.log(msg);
};
return Exemplo;
})();
module.exports = Exemplo;
我读过那个人,但是这些怎么是私人的,你也用同样的方式公开了,这是你的链接get@AndroidHelp-它们是私有的,因为如果不先在全局范围内声明它们,并且不使用var
重新声明它们,就无法在函数之外访问它们。请解释一下您的代码,这是如何使成员私有的?privateMember
和privateMethod()
可从类实例的成员访问publicMember
和publicMethod()
可以从类范围外调用。我将编辑我的答案来说明我的意思…我还添加了一个实现classvars的方法的示例,如果很多人对此有点怀疑的话。答案中提到的小提琴…但我仍然可以修改你的私人字段的值。。。myObj.privatember=“已修改”;即使事先没有这样的财产,你也可以这样做。您不会修改,而是添加属性。试试其他道具。它会一直工作的。谢谢老兄…把我添加到skype、facebook或gmail上。哈哈,在skype和gmail上。你能告诉我一些关于javascript的面试问题吗?我明天就有了。我该怎么回答