如何使变量表现为对象?

时间:2014-09-05 06:27:51

标签: javascript jasmine

如何使变量表现得像函数/对象。我想实现与Jasmine Matchers

类似的东西
describe("The 'toBe' matcher compares with ===", function() {
  it("and has a positive case", function() {
    expect(true).toBe(true);
  });


  it("and can have a negative case", function() {
    expect(false).not.toBe(true);
  });
});

我如何实现not.toBe()

之类的内容

2 个答案:

答案 0 :(得分:2)

那只是返回一个看起来有点像这样的对象:

{
    not : {
        toBe : function () {}
    },
    toBe : function () {}
}

因此,对象返回基本上有两个成员 - 对象not和函数toBe。对象not有一个成员 - 另一个名为toBe的函数。

期望函数的简单实现:

function expect (var) {
    return {
        toBe : function (var2) {
            if (var != var2) {
                throw new Error("not to be");
            }
        },
        not : {
            toBe : function (var2) {
                if (var == var2) {
                    throw new Error("not NOT to be");
                }
            }
        }
    }
}

如果检查的变量不符合预期,则上面的expect函数将抛出错误:

expect(false).toBe(false);
expect(false).not.toBe(true);
expect(false).toBe(true); // error
expect(false).not.toBe(false); // error

注意:这只是使代码“漂亮”的语法糖。只需使用适当的函数名即可实现相同的逻辑:

function expect (var) {
    return {
        toBe : function (var2) {
            if (var != var2) {
                throw new Error("not to be");
            }
        },
        not_ToBe : function (var2) {
            if (var == var2) {
                throw new Error("not NOT to be");
            }
        }
    }
}

哪个更简单但可能不那么漂亮:

expect(false).toBe(false);
expect(false).not_toBe(true);
expect(false).toBe(true); // error
expect(false).not_toBe(false); // error

答案 1 :(得分:0)

我认为你想在javascript中创建一个对象。 这是一个具有函数" Hallo"的对象的示例。

var testObj = {
    Hallo: function() {alert("Hallo");}
};

您可以使用以下方式调用它:

testObj.Hallo();

并查看http://www.w3schools.com/js/js_objects.asp