35

我知道标题很模糊,但我不知道该写什么。
在 javascript 中,我知道如何编写这样调用的函数:

argument1.function(argument2);

这是小提琴演示: http: //jsfiddle.net/rFXhf/
现在我想知道我是否可以这样做:

argument1.argument2.function(argument3);//And even more!
4

2 回答 2

53

现代 ES6 方法

在对象内部定义函数时不再需要指定function关键字。

具有命名函数的第一个选项:

const myObj = {
  myMethod(params) {
    // ...do something here
  },
  myOtherMethod(params) {
    // ...do something here
  },
  nestedObj: {
    myNestedMethod(params) {
      // ...do something here
    }
  }
};

使用匿名函数的第二个选项:

const myObj = {
  myMethod: (params) => {
    // ...do something here
  },
  myOtherMethod: (params) => {
    // ...do something here
  },
  nestedObj: {
    myNestedMethod: (params) => {
      // ...do something here
    }
  }
};

前 ES6 风格:

const myObj = {
  myMethod: function myMethod(params) {
    // ...do something here
  },
  myOtherMethod: function myOtherMethod(params) {
    // ...do something here
  },
  nestedObj: {
    myNestedMethod: function myNestedMethod(params) {
      // ...do something here
    }
  }
}; 

注意:在第一个示例中,函数被命名并具有自己的 this-context。在第二个示例中,使用了函数外部的 this-context。在第三个示例中,函数没有命名,但有自己的 this-context。

因此,尽管所有方法看起来都相似,但它们还是有些不同。

于 2018-02-06T14:56:30.433 回答
42

您需要像这样定义对象:

var argument1 = {
    myvar : "12",
    mymethod : function(test) { return something; }
}

然后像这样调用mymethod:

argument1.mymethod(parameter);

或更深的版本:

var argument1 = {
    argument2 : {
       mymethod : function(test) { return something; }
    }
} 

然后:

argument1.argument2.mymethod(parameter);
于 2012-04-30T04:08:31.200 回答