Я использую 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>
Это ТОЛЬКО дает мне "[объект, объект]", почему? Если я удалю "новое", все будет правильно... Может ли кто-нибудь объяснить это мне? Большое спасибо!
Используйте новый оператор, если вы хотите создать новый объект. Если вы просто вызываете функцию, не используйте new
например:
function foo(){
this.something = 123;
return 123;
}
var a = foo(); // 123
var b = new foo(); // new object { something: 123 }
Для new
оператора javascript существует гораздо больше, но вам нужно начать.
Когда вы используете новый, он создает новый экземпляр объекта.
Когда вы удаляете "новое", он вызывает переменную MySample для выполнения сравнения.
var MySample;
Вы можете попробовать переименовать имя переменной в "localComparer" для лучшего понимания.