是否可以在TypeScript类中创建私有"函数"(方法)?假设我们有以下Person.tsTypeScript文件:
class Person {
constructor(public firstName: string, public lastName: string) {
}
public shout(phrase: string) {
alert(phrase);
}
private whisper(phrase: string) {
console.log(phrase);
}
}
Run Code Online (Sandbox Code Playgroud)
在编译时将其转换为以下内容:
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;
})();
Run Code Online (Sandbox Code Playgroud)
我期待whisper函数在闭包内声明,但不是在原型上?从本质上讲,这会使whisper函数在编译时公开?
Jud*_*her 83
TypeScript公钥/私钥关键字仅适用于TypeScript检查代码的方式 - 它们对JavaScript输出没有任何影响.
根据语言规范(第9-10页):
私人可见性是一种设计时构造; 它在静态类型检查期间强制执行,但并不意味着任何运行时实施.... TypeScript在设计时强制在类中实现封装(通过限制私有成员的使用),但不能在运行时强制执行封装,因为所有对象属性都可以在运行时访问.未来版本的JavaScript可能会提供私有名称,这些名称将启用私有成员的运行时实施
这已经在这里被问及并回答:https://stackoverflow.com/a/12713869/1014822
更新:这个古老的答案仍然得到的业务量,所以值得一提的是,除了上述语言规范链接,公共,私人和(现在的)保护的成员涵盖了打字稿详细手册上的班章.
2018更新 ES私有字段的实现现在是TypeScript RoadMap的未来项目,尽管讨论表明这将是一个并行的硬私有选项,而不是当前软私有实现的替代.
在Javascript(而不是TypeScript)中,您不能拥有私有的"成员"功能.
如果在闭包中定义私有函数,则无法将其作为类的实例上的实例方法调用.
如果这是你想要的,只需将TypeScript函数定义移到类体外.
| 归档时间: |
|
| 查看次数: |
55350 次 |
| 最近记录: |