为什么TypeScript在方法中允许省略“this”?

时间:2016-05-24 16:56:15

标签: javascript typescript

以下TypeScript编译没有错误:

class Something {

    name: string;

    constructor() {
        name = "test";
    }

}

这段代码编译没有错误,似乎相信name变量存在。但是它会生成不会运行的js,因为我省略了 this 关键字:

/Users/cburtbrown/Documents/code/ts/js/tstest.js:6
        console.log(name);
                    ^

ReferenceError: name is not defined
    at Something.action (/Users/cburtbrown/Documents/code/ts/js/tstest.js:6:21)
    at Object.<anonymous> (/Users/cburtbrown/Documents/code/ts/js/tstest.js:10:25)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:456:32)
    at tryModuleLoad (module.js:415:12)
    at Function.Module._load (module.js:407:3)
    at Function.Module.runMain (module.js:575:10)
    at startup (node.js:159:18)
    at node.js:444:3

如果我在构造函数中输错了变量,那么它将失败,并显示以下错误:

Cannot find name 'namej'

即使变量拼写正确,也不应发生此错误吗?

1 个答案:

答案 0 :(得分:5)

因为the window object has a name property.

就TypeScript而言,您正在尝试为此属性分配值。当然,如果您没有在浏览器中运行,这将失败。

您可以尝试分配值to any other window properties.

来自行测试

示例:

class Something {
    name: string;

    constructor() {
        status = "test";
    }
}