我有以下javascript代码:

function testClass() {
    this.SaveValue = function (value) {
        var isInstance = value instanceof TestEnum;

        if (!isInstance) {
            return;
        }
     }
}

TestEnum = {
    VALUE_0: 0,
    VALUE_1: 1,
    VALUE_2: 2
}


我通过以下方式创建此对象的实例:

$(function () {
    var a = new testClass();
    a.SaveValue(TestEnum.VALUE_1);
});


我要做的就是测试传递给SaveValue函数的值实际上是TestEnum的类型。但是,当我运行此代码时,出现以下错误:Uncaught TypeError: Expecting a function in instanceof check, but got 1

我要这样做正确吗?我尝试了typeof,但是它只返回number,对我来说不是特别有用。

最佳答案

您正在将数字传递给函数

a.SaveValue(TestEnum.VALUE_1);


由于TestEnum仅仅是一个对象,并且您正在引用该对象的number属性,因此您要使用数字来调用函数。您应该改为创建一个TestEnumValue对象,并将其用于对象的属性:

JSFiddle link for below

function testClass() {
    this.SaveValue = function (value) {
        var isInstance = value instanceof TestEnumValue;

        if (!isInstance) {
            return;
        }
     }
}

TestEnumValue = function(arg) {
   arg = arg ? arg : 0;  //  sensible default

   this.key = 'VALUE_' + arg;
   this.val = arg;
}

Level = {
    NumSpiders : new TestEnumValue(0),
    NumCreepers: new TestEnumValue(1),
    NumZombies : new TestEnumValue(2),
    NumChickens: new TestEnumValue  //  uses default enum value
};

$(function() {
    var a = new testClass();
    a.SaveValue(Level.NumSpiders);

    $('#hi').text(Level.NumSpiders.key);
});

关于javascript - 变量是Enum的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13613164/

10-10 12:31