我使用什么JavaScript模式从原型方法访问私有方法
What JavaScript pattern do I use to access private methods from a prototype method?
我使用什么JavaScript模式来提供
- 原型上的公共方法
- 可以从#1调用的私有方法
- 私有变量
当试图从原型公共方法调用私有方法时,我发现的其他答案似乎返回undefined。
事实上,您无法从原型访问私有内容。
原型通过将一个对象作为上下文绑定到所有方法来工作,因此您可以使用this
关键字来访问它
在面向对象编程中,您称之为私有的东西是在编译时解析的,以提示您试图访问的数据不应该在类外可读。但在运行时,此数据将以与其他属性相同的方式存储。
要让方法访问私有字段,您可以直接在实例上创建方法,而不是在原型上创建方法以允许它访问私有范围。这被称为特权方法。看看道格拉斯·克罗克福德的这篇文章。
var ClassExample = function () {
var privateProperty = 42
this.publicProperty = 'Hello'
var privateMethod = function () {
return privateProperty
}
this.privilegedMethod = function () {
return privateProperty
}
}
ClassExample.prototype.publicMethod = function() {
return this.publicProperty
}
像Typescript这样添加类和键入+隐私设置的语言将私有字段与公共字段一起存储。
class ClassExample {
private privateProperty
public publicProperty
constructor () {
this.privateProperty = 42
this.publicProperty = 'Hello'
}
method () {
return this.privateProperty
}
}
将在中编译
var ClassExample = (function () {
function ClassExample() {
this.privateProperty = 42;
this.publicProperty = 'Hello';
}
ClassExample.prototype.method = function () {
return this.privateProperty;
};
return ClassExample;
})();
相关文章:
- 使用“;这个“;JavaScript原型方法中的关键字
- 引用类变量中的原型方法
- 如何从对象的原型方法访问JavaScript对象属性
- 什么意思是“;向原型添加方法”;
- 如何将原型用于自定义方法和对象操作
- 如何从构造函数中调用js原型方法
- Javascript不调用原型方法
- jQuery如何在原型中调用方法
- 为什么不't loadash/aunderline将util方法放在数组原型上
- 有没有任何情况下,一个方法不应该是原型方法
- 调用影子原型方法的更简单/更好的方法
- 使用sinon.js创建一个“;“间谍对象”;使用基于真实构造函数/原型的间谍方法
- 用于数组原型的JavaScript独特方法
- 当对象从服务器发送到客户端时,JS原型方法消失了
- 构造 JavaScript Array 原型方法
- 无法将方法原型添加到 JavaScript 对象
- Javascript对象方法原型
- 将方法原型化为子对象
- 继承方法(原型)和静态方法(表达式)的区别是什么?
- javascript中的闭包方法原型