【问题标题】:private method in an javascript objectjavascript 对象中的私有方法
【发布时间】:2014-12-12 19:52:15
【问题描述】:

我有一个像这样的对象:

var obj ={

  property : '',
  myfunction1 : function(parameter){
     //do stuff here
  }
}

我需要设置一些不能从对象外部访问/看到的私有属性和函数。它不适用于 var property:,var myFunction1

下一个问题是,如果我在对象内部或外部调用函数,我总是必须使用obj.myfunction() 来执行此操作。我想将“this”分配给一个变量。喜欢self : this。并使用self.propertyself.myfunction 在对象内部调用我的函数和变量。

怎么样? :)

【问题讨论】:

    标签: javascript oop object private


    【解决方案1】:

    有很多方法可以做到这一点。简而言之:如果你在另一个函数中定义了一个函数,你的内部函数将是私有的,只要你不提供对 if 的任何引用。

    (function obj(){
        var privateMethod = function() {};
        var publicMethod = function() {
            privateMethod();
            ...
        };
    
        return {
            pubMethod: publicMethod
        }
    }());
    

    【讨论】:

    【解决方案2】:

    使用闭包。 JavaScript 有function scope,所以你必须使用一个函数。

    var obj = function () {
        var privateVariable = "test";
        function privateFunction() {
            return privateVariable;
        }
    
        return {
            publicFunction: function() { return privateFunction(); }
        };
    }();
    

    【讨论】:

      【解决方案3】:
      var obj = (function() {
        var privateProperty;
        var privateFunction = function(value) {
          if (value === void 0) {
            return privateProperty;
          } else {
            privateProperty = value;
          }
        };
        var publicMethod = function(value) {
          return privateFunction(value);
        }
      
        return {
          getPrivateProperty: function() {
            return privateFunction();
          },
          setPrivateProperty: function(value) {
            privateFunction(value);
          }
        }
      })();
      
      obj.setPrivateProperty(3);
      console.log(obj.getPrivateProperty());
      // => 3
      console.log(obj.privateProperty);
      // => undefined
      obj.privateFunction();
      // => TypeError: undefined is not a function 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多