gpt4 book ai didi

javascript - 我可以在 JavaScript 的原型(prototype)函数中使用私有(private)方法吗?

转载 作者:行者123 更新时间:2023-11-30 10:34:40 26 4
gpt4 key购买 nike

我正在学习面向对象的 JavaScript,所以这个问题听起来可能很奇怪。 问题:normalize 函数应该是私有(private)的,外部不可访问/不可写。 问题:如何从prepare 原型(prototype)函数内部访问normalize

var AuthHmac = AuthHmac || (function(_, CryptoJS) {
function AuthHmac(options) {
var options = options || {},
normalize = function(s) { return s.toLowerCase(); };

this.additionalHeaders = options.additionalHeaders || {};
};

AuthHmac.prototype.prepare = function(request) {
request.headers = request.headers || {};

_.each(this.additionalHeaders, function(value, name) {
request.headers[this.normalize(name)] = value;
});
};

return AuthHmac;

})(_, CryptoJS);

最佳答案

你不能。 JavaScript 没有任何私有(private)或公共(public)属性的概念,因此人们使用闭包和作用域作为“hack”来模拟隐私。但这是有代价的,即原型(prototype)方法无法访问这些“私有(private)”属性。

但是在您的具体示例中,normalize 也可以在构造函数外部定义,因为它不依赖于构造函数内部的任何内容:

var AuthHmac = AuthHmac || (function(_, CryptoJS) {

var normalize = function(s) { return s.toLowerCase(); };

function AuthHmac(options) {
var options = options || {};
this.additionalHeaders = options.additionalHeaders || {};
};

AuthHmac.prototype.prepare = function(request) {
request.headers = request.headers || {};

_.each(this.additionalHeaders, function(value, name) {
request.headers[normalize(name)] = value;
});
};

return AuthHmac;

})(_, CryptoJS);

关于javascript - 我可以在 JavaScript 的原型(prototype)函数中使用私有(private)方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14774649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com