gpt4 book ai didi

javascript - Javascript 中 "static"类型对象的正确结构

转载 作者:行者123 更新时间:2023-11-28 05:37:49 24 4
gpt4 key购买 nike

我正在努力掌握在 JavaScript 中创建“静态”对象类型(我怀疑我的措辞是否正确......)。

在下面的代码中,我尝试创建一个 jQuery 插件(不过我怀疑这无关紧要),它创建多个 CrmQuery,每个都有自己的上下文信息作为 传入实例。我还想创建一个“静态”对象供所有 CrmQuery 使用(它可以是无状态的),并希望将其包含在 CrmQuery 命名空间中。

这是我的结构,但是当调用 CrmQuery.searchOperator[instance.Operator].buildCondition(instance.fieldName, searchTerm) 时,buildCondition 函数不会无法访问 CrmQuery.searchOperator 中的 oDataOperator 函数。我尝试以多种方式引用它,而不仅仅是 searchOperator.oDataOperator,并且 this 是对实际属性的引用,而不是 CrmQuery.searchOperator >。

结构:

(function($) { 
...
var crmQuery = new CrmQuery(instance);
var data = crmQuery.searchCrm(searchTerm);
...

var CrmQuery = function(instance) {
...
this.oDataUrl = function() {
...
oDataFilter += CrmQuery.searchOperator[instance.Operator].buildCondition(instance.fieldName, searchTerm);
...
return oDataFilter;
}();

this.searchCrm(searchTerm) {
...
url += this.oDataUrl;
}
...
}

CrmQuery.searchOperator = {
oDataFunctionOperator: function oDataFunctionOperator(fieldName, searchTerm, operator) {
return operator + "(" + fieldName + ", '" + searchTerm + "')";
},
oDataOperator: function oDataOperator(fieldName, searchTerm, operator) {
return fieldName + " " + operator + " '" + searchTerm +"'";
},
STARTSWITH: {
operator: "startswith",
buildCondition: function(fieldName, searchTerm) {
return this.oDataFunctionOperator(fieldName, searchTerm, this.operator)
}
},
ENDSWITH: {
operator: "endswith",
buildCondition: function(fieldName, searchTerm) {
return searchOperator.oDataFunctionOperator(fieldName, searchTerm, this.operator)
}
},
CONTAINS: {
operator: "substringof",
buildCondition: function(fieldName, searchTerm) {
return searchOperator.oDataFunctionOperator(fieldName, searchTerm, this.operator)
}
},
EXACTMATCH: {
operator: "eq",
buildCondition: function(fieldName, searchTerm) {
return searchOperator.oDataOperator(fieldName, searchTerm, this.operator)
}
},
toString: function () {
var thisVar = this;
var output = "searchOperator enum. ";
output += $.map(Object.keys(this), function (i) {
if (typeof thisVar[i] !== "function")
return i + ": " + thisVar[i].operator;
}).join(", ");
return output;
}
}
...
}(jQuery));

在 JavaScript 中实现这样的模式的正确方法是什么?

我希望这是有道理的?如果它太冗长,我深表歉意,但我不想遗漏任何可能重要的内容。

非常感谢,詹姆斯

最佳答案

继承是解决这个问题的一种方法,例如:

function searchOperator() {
}

//searchOperator.prototype.toString = ...

functionOperator = function(operator) {
searchOperator.apply(this);
this.operator = operator;
}

functionOperator.prototype = Object.create(searchOperator.prototype);

functionOperator.prototype.buildCondition = function (fieldName, searchTerm) {
return this.operator + "(" + fieldName + ", '" + searchTerm + "')";
}

operators = {

STARTSWITH: new functionOperator('startswith')
}

console.log(operators.STARTSWITH.buildCondition('foo', 'bar'))

关于javascript - Javascript 中 "static"类型对象的正确结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39209577/

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