Javascript:在该对象内调用对象方法
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; } };
我相信在遇到这个问题时有更好的方法来实现我的目标。这段代码并不特定于某种情况,只是说明了一般问题。因此,您可能无法为我遇到的具体情况提供替代方案。但也许您可以帮助我思考整体问题。