在TypeScript中的私有“函数”
是否有可能在TypeScript类中创build一个私有的“函数”(方法)? 假设我们有以下Person.ts
文件:
class Person { constructor(public firstName: string, public lastName: string) { } public shout(phrase: string) { alert(phrase); } private whisper(phrase: string) { console.log(phrase); } }
编译时正在转换为以下内容:
var Person = (function () { function Person(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } Person.prototype.shout = function (phrase) { alert(phrase); }; Person.prototype.whisper = function (phrase) { console.log(phrase); }; return Person; })();
意见
我期待在闭包中声明whisper
function,但不是在原型上? 从本质上讲,编译时公开的whisper
function?
TypeScript public / private关键字仅适用于TypeScript检查代码的方式 – 它们对JavaScript输出没有任何影响。
根据语言规范 (第9-10页):
私人可视性是一个devise时间构造; 它在静态types检查过程中被强制执行,但并不意味着任何运行时执行。 TypeScript在devise时强制实现类的封装(通过限制私有成员的使用),但不能在运行时强制封装,因为所有的对象属性都可以在运行时访问。 未来的JavaScript版本可能会提供专用名称,从而可以启用私有成员的运行时执行
这已经被问及在这里回答: https : //stackoverflow.com/a/12713869/1014822
更新:这个旧的答案仍然会获得大量的stream量,所以值得注意的是,除了上面的语言规范链接之外,公共,私有和(现在)保护的成员在类的TypeScript 手册章节中都有详细介绍。
在JavaScript(而不是TypeScript),你不能有一个私人的“成员”function。
如果在闭包中定义了一个私有函数,那么您将无法在类的实例中将其作为实例方法调用。
如果这就是你想要的,只要将TypeScript函数定义移到类体外。