【发布时间】:2016-05-31 15:01:14
【问题描述】:
在 TypeScript 中定义模块有两种方式:
“单身”生活方式:
import app = require("durandal/app");
import ko = require("knockout");
export var name = ko.observable();
export function sayHello() {
app.showMessage('Hello ' + name() + '! Nice to meet you.', 'Greetings');
}
“短暂”的生活方式:
import app = require("durandal/app");
import ko = require("knockout");
class AnythingYouLike {
name = ko.observable();
sayHello() {
app.showMessage('Hello ' + this.name() + '! Nice to meet you.', 'Greetings');
}
}
export = AnythingYouLike;
我用引号作为我的名字来定义模块的这些不同方式,因为我无法弄清楚“官方”名称是什么。
使用“transient”样式,尤其是在使用像Durandal 这样的框架时,是很有意义的,因为您可以更好地控制视图模型模块的生活方式并避免尴尬的错误。一个缺点是您必须在任何地方都使用“this”,这有两个问题:
- 将模块从一种样式更改为另一种样式很乏味。
- 到处都是
this.很吵。
为什么实际上需要使用this.,为什么两种样式都不需要?
【问题讨论】:
-
你不是在 Transient 风格的类的上下文中与 Singleton 风格的函数相反吗?在类上下文中调用
this.在 OOP 中很常见,对吧?提前道歉。我可能会想念你的问题。 -
是的,除了大多数语言允许它是隐式的,我不明白为什么它不能在这里。
-
哇,我的问题被否决了。我想知道为什么。如果可以的话,我很乐意改进它。
-
您的问题中似乎没有任何内容涉及 AMD 模块。您可能希望改进您的问题标题。
标签: javascript typescript durandal amd