好吧,我们可以在 javascript 中拥有私有标识符,但是受保护的标识符又如何呢?

发布于 2024-07-25 03:27:30 字数 47 浏览 6 评论 0原文

就这么简单,我们能以某种方式模拟 Javascript 中的“受保护”可见性吗?

Simple as that, can we emulate the "protected" visibility in Javascript somehow?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

单调的奢华 2024-08-01 03:27:30

这样做:

/* Note: Do not break/touch this object */
...code...

或者谷歌在第一页找到了这个:

http://blog.blanquera.com/2009/03/javascript-protected-methods-and.html

Do this:

/* Note: Do not break/touch this object */
...code...

Or a bit of google found this on the first page:

http://blog.blanquera.com/2009/03/javascript-protected-methods-and.html

九命猫 2024-08-01 03:27:30

当然可以。 这是另一个示例

Sure you can. Here's another example.

漆黑的白昼 2024-08-01 03:27:30

这可能意味着什么? 您没有课程

我想您可以分析caller来确定它是否满足允许调用方法的一组标准。 这将是极其低效的,而且你的标准总是会被欺骗。

What could that possibly mean? You don't have classes.

I suppose you could analyze caller to determine whether it meets some set of criteria for being permitted to call a method. This will be hideously inefficient and your criteria will always be spoofable.

等往事风中吹 2024-08-01 03:27:30

这里有一个值得一提的有趣模式:JavaScript 构造函数可以返回任何对象(不一定是 this)。 人们可以创建一个构造函数,该函数返回一个代理对象,该对象包含“真实”实例对象的“真实”方法的代理方法。 这听起来可能很复杂,但事实并非如此。 这是一个代码片段:

var MyClass = function() {
    var instanceObj = this;
    var proxyObj = {
        myPublicMethod: function() {
            return instanceObj.myPublicMethod.apply(instanceObj, arguments);
        }
    }
    return proxyObj;
};
MyClass.prototype = {
    _myPrivateMethod: function() {
        ...
    },
    myPublicMethod: function() {
        ...
    }
};

好的一点是,如果我们定义命名受保护方法的约定,则可以自动创建代理。 我创建了一个小库,它正是这样做的: http://idya.github.com/oolib/

There's an interesting pattern worth mentioning here: a JavaScript contructor function may return any object (not necesserily this). One could create a constructor function, that returns a proxy object, that contains proxy methods to the "real" methods of the "real" instance object. This may sound complicated, but it is not; here is a code snippet:

var MyClass = function() {
    var instanceObj = this;
    var proxyObj = {
        myPublicMethod: function() {
            return instanceObj.myPublicMethod.apply(instanceObj, arguments);
        }
    }
    return proxyObj;
};
MyClass.prototype = {
    _myPrivateMethod: function() {
        ...
    },
    myPublicMethod: function() {
        ...
    }
};

The nice thing is that the proxy creation can be automated, if we define a convention for naming the protected methods. I created a little library that does exactly this: http://idya.github.com/oolib/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文