Почему я не могу использовать «new» для ссылки на статический метод в TypeScript?

-2

Я использую 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>

Это ТОЛЬКО дает мне "[объект, объект]", почему? Если я удалю "новое", все будет правильно... Может ли кто-нибудь объяснить это мне? Большое спасибо!

  • 0
    @basarat и Hiệp Lê: Да, я вижу. Но даже если я использую «new», это создаст новый экземпляр и напрямую вызовет его метод вместо того, чтобы возвращать меня [Object, object] …… Почему?
Теги:

2 ответа

0

Используйте новый оператор, если вы хотите создать новый объект. Если вы просто вызываете функцию, не используйте new

например:

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

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

Для new оператора javascript существует гораздо больше, но вам нужно начать.

0

Когда вы используете новый, он создает новый экземпляр объекта.

Когда вы удаляете "новое", он вызывает переменную MySample для выполнения сравнения.

var MySample;

Вы можете попробовать переименовать имя переменной в "localComparer" для лучшего понимания.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню