如何在对象文字中使用`this`?

时间:2017-10-30 18:20:44

标签: javascript jquery

我创建了一个机制,而我可以使用jquery通过AJAX访问给定的资源(用户,帖子等),它可以工作和填充,但我希望能够使用this关键字,而不是例如Resource.active_filters,所以我会写this.active_filters(参见代码)。但是,当我像这样使用它时,它引用methods对象而不是Resource对象。如何使它引用Resource对象?

以下是代码:

var Resource = {
  options: {},
  active_filters: [],
  ready_filters: [],
  ready_count: 0,
  group_items: [],
  init: function () {},
  methods: {
    reset: function () {
      Resource.active_filters = [];
      Resource.ready_filters = [];
      Resource.ready_count = 0;
    },
  },
  bindEvents: function () {}
};

2 个答案:

答案 0 :(得分:4)

除非您定义ES6样式的类或在顶层定义该函数,否则绑定将如何。

你总是可以写一个经典的课程:

function Resource() {
  // ...
}

Resource.prototype.reset = function() {
  this.active_filters = [ ];
  // ...
}

或者你可以定义一个ES6:

class Resource {
  reset() {
    this.active_filters = [ ];
    // ...
  }
}

这两种风格比你问题中的方法更常规。

答案 1 :(得分:1)

看起来这是您正在编写的一些API,将由其他一些代码调用。

调用此API时,请按以下方式调用reset

reset.call(Resource)

这将使用reset对象的上下文调用Resource函数。

更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call