试图从书籍javascript忍者了解javascript代码

时间:2014-04-07 01:27:22

标签: javascript ninja

从下面的例子中,我想我理解所有的代码,除了我无法理解为什么需要this.assert和this.test? 没有它们,这段代码不能代替吗?

这是来自javascript ninja的秘密

 <script>   
    (function() {
        var results;
        this.assert = function assert(value,desc) {
            var li = document.createElement("li");
            li.className = value ? "pass" : "fail";
            li.appendChild(document.createTextNode(desc));
            results.appendChild(li);

            if (!value) {
                li.parentNode.parentNode.className = "fail";
            }
            return li;
        };
        this.test = function test(name,fn) {
            console.log("JOT");
            results = document.getElementById("results");
            console.log("this is" , results)
            results = assert(true, name).appendChild(
                document.createElement("ul"));
            fn();
        };
    })();

    window.onload = function() {
            console.log("before");
        test("A test.", function() {
            console.log("after a test");
            assert(true, "First assertion completed");
            console.log("after assert1");
            assert(true, "Second assertion completed");
            console.log("after assert2");
            assert(true, "Third assertion completed");
            console.log("after assert3");
        });
        test("Another test.", function() {
            assert(true, "First test completed");
            assert(true, "Second test completed");
            assert(false, "Third test fail");
        });
        test("Another test.", function() {
            assert(true, "First test completed");
            assert(true, "Second test completed");
            assert(true, "Third test completed");
        });
    };
</script>

1 个答案:

答案 0 :(得分:1)

top函数中的

this指的是全局对象,因为它既不作为构造函数也不作为方法调用。在Web浏览器中,全局对象为window

无论如何,将属性分配给全局对象允许您将其作为全局变量引用。稍后在代码中,assert函数中提供了testonload

那么为什么不说window.assert = ...呢?一个原因是代码示例中的构造稍微便于移植,以防您需要在全局对象不是window的JavaScript环境中运行它。