Javascript:在该对象内调用对象方法

27 浏览
0 Comments

Javascript:在该对象内调用对象方法

如何使用最佳设计模式来实现以下目标(但目前无法实现)?

var obj = (function() {
  // 定义私有变量和方法的代码
  var _obj = {
    property: value,
    method1: function() {
      // 做一些事情
    },
    method2: function() {
      // 使用property
      var prop = _obj.property; // 显然不起作用
      // 调用method1
      obj.method1(); // "obj"尚未定义完成!
    }
  };
  // 现在我可以做...
  var prop = _obj.property;
  return _obj;
})();
// 现在我可以做...
obj.method1();

我认为应该能实现的一种变化是

var obj = (function() {
  var property = value,
      method1 = function() {
        // 做一些事情
      },
      method2 = function() {
        // 使用property
        var prop = property;
        // 调用method1
        method1();
      },
      _obj = {
        property: property,
        method1: method1,
        method2: method2
      };
  return _obj;
})();

类似地,对于使用new操作符创建的对象,怎么做呢?在构造函数本身中,可以编写this.method()。但如果您希望将构造函数保持简短,仅定义在创建时可能被自定义的那些内容,然后在原型中定义其余内容呢?(这似乎是常见的模式。)原型中的属性/方法可以以任何方式相互交互吗?

var MyObj = function(name) {
  this.name = name;
};
var obj = new MyObj('Bob');
MyObj.prototype = {
  called_often: function() {
    // 比下面的代码多得多
    return document.getElementById('someID').value;
  },
  global_default: 'value', // 可以更改,因此在运行时需要提取值
  does_stuff: function(value) {
    var str = global_default + value, // 单独访问global_default无法访问
        input = MyObj.called_often(), // 无效;MyObj.prototype.called_often()可以
        name = this.name; // 在原型中使用'this'无法工作
                          // 即使在创建的对象中也是如此
    return name + input + str;
  }
};

我相信在遇到这个问题时有更好的方法来实现我的目标。这段代码并不特定于某种情况,只是说明了一般问题。因此,您可能无法为我遇到的具体情况提供替代方案。但也许您可以帮助我思考整体问题。

0