gpt4 book ai didi

Javascript 原型(prototype)常量声明

转载 作者:数据小太阳 更新时间:2023-10-29 04:31:11 26 4
gpt4 key购买 nike

我正在使用 RESTful API,我的 Javascript 代码通过 jQuery 的 $.ajax() 调用进行 REST 查询。

我已经实现了一个 javascript Rest 类,我将在下面展示它(大大简化):

var Rest = function (baseUrlPath, errorMessageHandler) {
...
};

// Declare HTTP response codes as constants
Rest.prototype.STATUS_OK = 200;
Rest.prototype.STATUS_BAD_REQUEST = 400;

... // other rest methods

Rest.prototype.post = function (params) {
$.ajax({
type: 'POST',
url: params.url,
data: params.data,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
beforeSend: this._authorize,
success: params.success,
error: params.error || this._getAjaxErrorHandler(params.errorMessage)
});
};

... // more rest methods

Rest.prototype.executeScenario = function (scenarioRef) {
var self = this;

this.post({
url: 'myurlgoeshere',
data: 'mydatagoeshere',
success: function (data, textStatus, xhr) {
if (xhr.status == 200) {
console.log("everything went ok");
}
},
error: function (xhr, textStatus, errorMsg) {
// TODO: constants
if (404 == xhr.status) {
self.errorMessageHandler("The scenario does not exist or is not currently queued");
} else if (403 == xhr.status) {
self.errorMessageHandler("You are not allowed to execute scenario: " + scenarioRef.displayName);
} else if(423 == xhr.status) {
self.errorMessageHandler("Scenario: " + scenarioRef.displayName + " is already in the queue");
}
}
});
};

代码按预期工作,但我决定添加一些常量以帮助美化代码并提高可读性。例如,我的代码中有几个地方正在检查 xhr.status == 200 或 xhr.status == 400 等等。

我可以将类变量声明为 Rest.prototype.STATUS_OK = 200;

但是变量是可编辑的,我想不出如何让它们保持常量。例如,在我的代码中,我可以执行 this.STATUS_OK = 123; 这将修改变量。我玩过 const 关键字,但没有成功。

我看过这个:Where to declare class constants? , 但帮助不大。

有人可以指出正确的方向,告诉我如何使这些字段成为常量文字而不是变量吗?

最佳答案

使用 ECMAScript 5 的 Object.defineProperty你可以使一个值不可设置:

Object.defineProperty(Rest, "STATUS_OK", {
enumerable: false, // optional; if you care about your enumerated keys
configurable: false,
writable: false,
value: 200
});

或者,由于这些是默认值,只需执行以下操作:

Object.defineProperty(Rest, "STATUS_OK", { value: 200 });

这使得 Rest.STATUS_OK 在访问时产生 200,但它不会响应重新定义它或 删除 它的尝试。此外,configurable: false 将阻止任何尝试通过后续的 defineProperty 调用重新定义该属性。

但是,这在 older browsers that don't support ES5's defineProperty 中不起作用(尤其是 IE8 及以下版本)。

关于Javascript 原型(prototype)常量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17859317/

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