JavaScript构造函数在同一个构造函数中调用其他方法的方法

时间:2015-05-03 09:03:12

标签: javascript

我正在尝试从同一构造函数中的另一个方法调用对象方法,但它似乎没有工作 - 我只是得到了错误TypeError: undefined is not a function (evaluating 'this.uiDisplayOptions()')

我正在使用new关键字var ui = new _ui()来实例化对象。

任何人都知道它为什么不起作用?我已经看到了这种设置的例子。

以下是代码:

function _ui() {
this.uiDisplayOptions = function() {
    var len =  channels[currentChannel].stepsChannel;
    $("select#length option")
        .prop('selected', false)
        .filter('[value="' + len + '"]')
        .prop('selected', true);
    var rand = channels[currentChannel].randomAmtChannel;
    $("select#randomness option")
        .prop('selected', false)
        .filter('[value="' + rand + '"]')
        .prop('selected', true);
    var dir = channels[currentChannel].readDirection;
    $("select#readdirection option")
        .prop('selected', false)
        .filter('[value="' + dir + '"]')
        .prop('selected', true);
}

this.uiSetListeners = function() {
    // Select Channel
    $("#selectChannel0").addClass("green");
    $(".channelselect").click(function() {
        $(".channelselect").removeClass("green");
        $(this).addClass("green");
        currentChannel = $(this).data("channel");
        displayUpdateChannel();
        this.uiDisplayOptions();
    });

    // Select Row
    $("#selectRow0").addClass("red");
    $("#selectRow0").click(function() {
        currentRow = 0;
        $("#selectRow1").removeClass("red");
        $(this).addClass("red");
    });
    $("#selectRow1").click(function() {
        currentRow = 1;
        $("#selectRow0").removeClass("red");
        $(this).addClass("red");
    });

    // Increment/Decrement Selected Row Pattern
    $("#patternInc").click(function() {
        selectPatternRow(1);
        displayPattern();
    });
    $("#patternDec").click(function() {
        selectPatternRow(-1);
        displayPattern();
    });

    // Shift Left/Right Selected Row Pattern
    $("#shiftLeft").click(function() {
        selectShiftRow(-1);
        displayPattern();
    });
    $("#shiftRight").click(function() {
        selectShiftRow(1);
        displayPattern();
    });

    // Handle Row 'Pattern Locks'
    $(".lock").click(function() {
        var step = $(this).data("lockstep");
        switch(toggleLockBit(step)) {
            case 0:
                $(this).removeClass("red green");
                break;
            case 1:
                $(this).addClass("red");
                break;
            case 2:
                $(this).removeClass("red").addClass("green");
                break;
        }
        displayPattern();
    });

    // Handle Channel Length change
    $("#length").change(function() {
        selectCurrentChannelLength($(this).val());
        displayChannelLength();
    });

    // Handle Channel Randomness change
    $("#randomness").change(function() {
        selectCurrentChannelRandomAmt($(this).val());
        displayRandomAmt();
    });
}

}

1 个答案:

答案 0 :(得分:0)

你不能在构造函数中调用这样的函数,this将引用全局对象window,直到你使用constructor关键字调用new函数。 / p>

var ui = new  _ui();