首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我使用什么JavaScript模式从原型方法中访问私有方法?

我使用什么JavaScript模式从原型方法中访问私有方法?
EN

Stack Overflow用户
提问于 2015-10-31 23:14:07
回答 1查看 144关注 0票数 1

我应该使用什么样的JavaScript模式给我:

  1. 原型的公共方法
  2. 可以从#1调用的私有方法。
  3. 私有变量

在试图从原型公共方法调用私有方法时,我发现的其他答案似乎没有定义。

EN

回答 1

Stack Overflow用户

发布于 2015-11-01 00:02:15

实际上,您不能从原型中访问一些私有的东西。

原型通过将对象绑定为所有方法的上下文来工作,因此您可以使用this关键字来访问它。

在面向对象编程中,您称之为私有的东西是在编译时解决的,它提示您尝试访问的数据不应该从类外部读取。但在运行时,这些数据将以与其他属性相同的方式存储。

要让方法访问私有字段,您可以直接在实例上创建方法,而不是在prototype上创建方法,以允许它访问私有范围。这被称为特权方法。请看道格拉斯·克罗克福德的这篇文章

代码语言:javascript
复制
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
}

添加类和类型+隐私设置的语言(如类型记录)在公共字段旁边存储私有字段。

代码语言:javascript
复制
class ClassExample {

    private privateProperty
    public publicProperty

    constructor () {
        this.privateProperty = 42
        this.publicProperty = 'Hello'
    }

    method () {
        return this.privateProperty
    }

}

将编译在

代码语言:javascript
复制
var ClassExample = (function () {
    function ClassExample() {
        this.privateProperty = 42;
        this.publicProperty = 'Hello';
    }
    ClassExample.prototype.method = function () {
        return this.privateProperty;
    };
    return ClassExample;
})();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33457614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档