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;

任何人都可以告诉我如何使用或声明javascript中的私有成员。我会很感激举个例子。我是新来的

私有成员是由构造函数生成的。构造函数的普通变量和参数成为私有成员

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的面试问题吗?我明天就有了。我该怎么回答