这是我在创建AngularJS应用程序时一直在考虑的事情.当我第一次了解AngularJS工厂时,我认为它们的一个巧妙用法是创建并返回构造函数而不是普通对象,即:
app.factory("Foo", function() {
function Foo(bar, baz) {
this.bar = bar;
this.baz = baz;
...
}
Foo.prototype = {
constructor: Foo,
method1: function() { ... },
method2: function() { ... },
...,
methodn: function() { ... },
};
return Foo;
});
Run Code Online (Sandbox Code Playgroud)
然后,您可以将该功能注入您的控制器并调用它new.我发现这美观和OOP-y,但现在我开始认为它实际上是一种反模式.问题是当它在AngularJS感知上下文中工作时它可以正常工作,但是一旦你想要从控制台调用构造函数,在Web Worker中使用它,或者在非工作中重用代码AngularJS应用程序,你开始不得不解决 AngularJS而不是它.我开始怀疑这种方法是否被误导,因为javascript中的函数似乎已经是"单身人士"并且似乎不需要任何帮助实例化.
我滥用AngularJS工厂了吗?使用暴露于全局范围的构造函数会更好吗?更一般地说,是否存在促使AngularJS工厂/服务/提供商在全球对象上使用的特定因素,反之亦然?
字素是文本的用户感知字符,用Unicode可以包含几个代码点。
重要的是要认识到,用户认为的“字符”(一种语言的书写系统的基本单元)可能不仅仅是一个Unicode代码点。而是,该基本单元可以由多个Unicode代码点组成。为了避免与计算机对术语“字符”的使用产生歧义,将其称为用户可感知的字符。例如,“ G” +坟墓重音是用户感知的字符:用户将其视为单个字符,但实际上由两个Unicode代码点表示。这些用户感知的字符通过所谓的字素簇来近似,该字素簇可以通过编程确定。
我是否可以使用正则表达式(在javascript中)来匹配单个字素簇?例如
"???bar".match(/*?*/)[0] === "???"
"??baz".match(/*?*/)[0] === "??"
"aa".match(/*?*/)[0] === "a"
"\r\n".match(/*?*/)[0] === "\r\n"
"???foo".match(/*?*/)[0] === "???"
Run Code Online (Sandbox Code Playgroud) 根据TypeScript 3.1 发行说明typesVersions,TypeScript 提供了一种通过设置字段在 npm 包中传递更严格类型的方法,package.json如下所示:
{
"name": "package-name",
"version": "1.0",
"types": "./index.d.ts",
"typesVersions": {
">=3.1": { "*": ["ts3.1/*"] }
}
}
Run Code Online (Sandbox Code Playgroud)
但是,文档没有说明指定ts3.1/index.d.ts文件是如何创建的。我是否必须index.d.ts在此位置手动写入文件?有没有办法使用打字稿或相关的构建工具有条件地生成更严格的类型?
javascript ×2
angularjs ×1
build ×1
node.js ×1
npm ×1
regex ×1
stream ×1
types ×1
typescript ×1
unicode ×1