如何不重复“obj。”在同一个对象上调用多个方法时?

时间:2015-06-28 19:29:57

标签: javascript

我不记得我在哪里看到你可以替换这样的电话:

my_obj.method_1();
my_obj.method_2();
my_obj.method_3();

有这样的事情:

some_construct (my_obj) {
    method_1();
    method_2();
    method_3();
}

关于如何做到这一点的任何想法?

注意:我不是在寻找方法链

4 个答案:

答案 0 :(得分:2)

使用with,但不要这样做。它充其量只是confusing syntax,并且在strict mode(你应该使用它)中被禁止。



var my_obj = {
  value: 0,
  foo: function() {
    this.value++
  },
  bar: function() {
    this.value += 2
  },
  baz: function() {
    alert(this.value)
  }
};

with(my_obj) {
  foo();
  bar();
  baz();
}




答案 1 :(得分:1)

在现代JavaScript中,没有语法糖。

在一天结束时,面向对象的编程不喜欢只是通过阅读代码就无法知道哪个对象实例属于成员。

正确的方式

面向对象编程中有一个名为 encapsulation 的概念。如果您需要简化代码,因为您不想调用应该一起调用的一组方法,则需要将这些调用封装到更通用的方法中:

var obj = {
    method1: function() {}, method2: function(), method3: function(),
    doAll: function() {
         this.method1();
         this.method2();
         this.method3();
    }
};

稍后您只需逐个调用obj.doAll()而不是每个方法。

答案 2 :(得分:1)

构造

with (my_obj) {
    ...
}

不使用!它已被弃用,因为它很难看出名称是指对象属性还是变量,并且必须在运行时重复进行检查。 "use strict";实际上禁止with

如果您不想输入更多内容,可以使用较短的名称为对象提供:

o = my_obj;
o.method_1();
o.method_2();
o.method_3();

答案 3 :(得分:1)

如果您的目标是"保存"文字,你可以:



function callAll(o, funcs) {
  funcs.forEach(function(func) {
    o[func]();
    });
}

// Have an object...
var my_obj = {
  method1: function() {
    alert(1);
  },
  method2: function() {
    alert(2);
  },
  method3: function() {
    alert(3);
  }
}

// And now you can call multiple object methods like this:
callAll(my_obj, ['method1', 'method2', 'method3']);




所以基本上你有一个简短的函数可以调用一个对象和一个要调用的方法名列表。

相关问题