为什么我不能使用“new”来引用TypeScript中的静态方法?

时间:2014-01-13 02:01:00

标签: typescript

我正在使用TypeScript,这是我的代码:

module MySample {

    export interface IComparable {
        Compare(object1:any,object2:any): number;
    }

    export class MyComparer implements IComparable {
        Compare(object1: any, object2: any): number {
            if (typeof (object1) == "number" && typeof(object2)=="number") {
                var n: number = object1 - object2;
                return n;
            }
            else if (typeof (object1) == "string" && typeof(object2)=="string") {
                return object1 > object2 ? 1 : (object1 == object2) ? 0 : -1;
            }
            throw Error("Cannot compare a different kind of type together!");
        }
    }

    export class GeneralComparer {
        static Comparer(num1:any,num2:any,comparer: IComparable): number {
            return comparer.Compare(num1, num2);
        }
    }
}

现在“编译代码”是:

var MySample;
(function (MySample) {
    var MyComparer = (function () {
        function MyComparer() {
        }
        MyComparer.prototype.Compare = function (object1, object2) {
            if (typeof (object1) == "number" && typeof (object2) == "number") {
                var n = object1 - object2;
                return n;
            } else if (typeof (object1) == "string" && typeof (object2) == "string") {
                return object1 > object2 ? 1 : (object1 == object2) ? 0 : -1;
            }
            throw Error("Cannot compare a different kind of type together!");
        };
        return MyComparer;
    })();
    MySample.MyComparer = MyComparer;

    var GeneralComparer = (function () {
        function GeneralComparer() {
        }
        GeneralComparer.Comparer = function (num1, num2, comparer) {
            return comparer.Compare(num1, num2);
        };
        GeneralComparer.Show = function () {
            return 1;
        };
        return GeneralComparer;
    })();
    MySample.GeneralComparer = GeneralComparer;
})(MySample || (MySample = {}));
//# sourceMappingURL=app.js.map

现在我倾向于将静态方法引用如下:

<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>TypeScript HTML App</title>
    <link rel="stylesheet" href="app.css" type="text/css" />
    <script src="app.js"></script>
    <script>
        function Ini()
        {
            var result = new MySample.GeneralComparer.Comparer(1, 2, new MySample.MyComparer());
            alert(result);

        }
    </script>
</head>
<body onload="Ini()">
    <h1>TypeScript HTML App</h1>

    <div id="content">

    </div>
</body>
</html>

这只能给我“[对象,对象]”,为什么?如果我删除“新”,一切顺利......任何人都可以向我解释这个吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

当你使用new时,就是创建一个新的对象实例。

当你删除“new”时,它会调用变量MySample来执行比较。

var MySample;

您可以尝试将变量名重命名为“localComparer”,以便更好地理解。

答案 1 :(得分:0)

如果要创建新对象,请使用new运算符。如果您只是在调用函数,请不要使用new

e.g。 :

function foo(){
    this.something = 123;
    return 123;
}

var a = foo(); // 123
var b = new foo(); // new object { something: 123 }

new javascript运算符还有很多内容,但这应该可以帮助您入门。