在特定上下文中访问对象时出现问题

时间:2019-01-01 20:36:35

标签: javascript

我无法从特定上下文访问特定对象。
我有一段使用jquery,moment和daterangepicker的Javascript。

我正在使用jquery设置要在apply.daterangepicker事件触发时运行的函数,并且需要从该函数中的另一个对象中调用一个方法。
我的代码如下:

$('input[name="daterangetext"]').on('apply.daterangepicker', function(e,picker) {
        pickerStartString = moment(picker.startDate).format('YYYY-MM-DD HH:mm');
        pickerEndString = moment(picker.endDate).format('YYYY-MM-DD HH:mm');
        start = pickerStartString;
        end = pickerEndString;
        changeRange();
});

调用changeRange就是问题所在。我有一个定义如下的对象:

var APG_g = new APGraph('test APGraph Object');

changeRange方法定义为:

this.changeRange = function()
{
    function body here
}

如何从上述函数中调用changeRange
我曾尝试将其称为APG_g.changeRange(),但这种方法不起作用-当我收到未定义的运行时错误时,变量changeRange在内部使用的情况似乎未设置,随后对changeRange的调用由于相同的原因而失败。

谁能解释我应该怎么做?

2 个答案:

答案 0 :(得分:0)

希望这个小演示可以为您解决问题。您似乎没有使用ES6语法,因此我添加的JavaScript使用了较旧的语法。这个想法是向您展示如何从特定的上下文中调用方法,就像您问的那样。

var button = $('button');

function Test() {
  this.testMethod = function() {
    button.html('New button text');
  }
}

var myTest = new Test();

button.on('click', function handleClick() {
  myTest.testMethod();
});
body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

#banner-message {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  font-size: 25px;
  text-align: center;
  transition: all 0.2s;
  margin: 0 auto;
  width: 300px;
}

button {
  background: #0084ff;
  border: none;
  border-radius: 5px;
  padding: 8px 14px;
  font-size: 15px;
  color: #fff;
  cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<div id="banner-message">
  <button>Click to change text</button>
</div>

http://jsfiddle.net/zt2ohs7j/

答案 1 :(得分:0)

感谢您的意见。原来我只是弄乱了代码。我现在可以正常工作了。正如安迪·霍夫曼(Andy Hoffman)所暗示的那样,正确的解决方案只是将方法称为APG_g.changeRange();