在 JavaScript 中以编程方式设置构造函数参数
Programmatically Set Constructor Parameters in Javascript
我正在尝试与javascript api进行交互(请记住,我以前从未这样做过)。我尝试使用的一个例子在这里:
SearchSpring.Catalog.init({
leaveInitialResults : true,
facets : '.leftNav',
results : '#results',
result_layout: 'list',
results_per_page : 12,
layout: 'top',
loadCSS: false,
filters: {
color: ['Blue']
},
backgroundFilters: {
category: ['Shirt', 'Shoes'],
department: ['Mens']
},
maxFacets: 5,
maxFacetOptions: 10,
sortText: 'Sort By ',
sortType: 'dropdown',
filterText: 'Refine Search Results',
previousText: 'Previous',
scrollType: 'scroll',
scrollTo: 'body',
backgroundSortField: 'price',
backgroundSortDir: 'desc',
compareText: 'Compare Items',
summaryText: 'Current Filters',
showSummary: true,
subSearchText: 'Subsearch:',
showSubSearch: true,
forwardSingle: false,
afterResultsChange: function() { $('.pagination').hide(); },
filterData: function(data) { console.debug(data); }
});
在示例中,我想添加一个带有值的"背景过滤器":
var cat="MyNewCategory";
cat.value="ANewValue;
如何将此类别和值添加到上面列出的背景过滤器中?
这是使用框架时非常常见的框架初始化模式。
您的示例代码将 JavaScript 对象{}
作为参数传递到称为 init 的函数()
中。
去掉所有定义,模式如下所示:
SomeFramework.frameworkFunction({});
在上面的代码中,{}
是一个用于初始化的空对象。在实践中,有两种方法可以使用该对象。
关于您的第一个代码片段,您可以将代码添加到该"对象文字"中。
背景过滤器:{ 类别: ["衬衫", "鞋子"], 部门: ['男士'], 猫: ["我的价值"]},
请注意添加的逗号,这是一个重要的绊脚点。这可能适合也可能不适合您的需求,具体取决于几个因素。
关于第二个代码片段,您可以在运行时将成员应用于 JavaScript 对象。我的意思是,您的var cat可以添加到正在传入的匿名对象文字中。很难说,但一个简单的概念。方法如下:
//Say this is initialized in some separate way. //There is a bug here I'll describe later.
var cat="MyNewCategory";
cat.value="ANewValue";
//Extract and name the initialization object. It is verbatim at this point.
var initObject = {
leaveInitialResults : true,
facets : '.leftNav',
results : '#results',
result_layout: 'list',
results_per_page : 12,
layout: 'top',
loadCSS: false,
filters: {
color: ['Blue']
},
backgroundFilters: {
category: ['Shirt', 'Shoes'],
department: ['Mens']
},
maxFacets: 5,
maxFacetOptions: 10,
sortText: 'Sort By ',
sortType: 'dropdown',
filterText: 'Refine Search Results',
previousText: 'Previous',
scrollType: 'scroll',
scrollTo: 'body',
backgroundSortField: 'price',
backgroundSortDir: 'desc',
compareText: 'Compare Items',
summaryText: 'Current Filters',
showSummary: true,
subSearchText: 'Subsearch:',
showSubSearch: true,
forwardSingle: false,
afterResultsChange: function() { $('.pagination').hide(); },
filterData: function(data) { console.debug(data); }
};
//Now we can add variables (and functions) dynamically at runtime.
initObject.cat = cat;
//And pass them into the framework initialization in a separated way.
SearchSpring.Catalog.init(initObject);
现在是错误。我不知道解决方案,因为我不知道它的意图是什么,但我可以指出潜在的不正确之处。
var cat="MyNewCategory";cat.value="ANewValue;
此代码为:1 创建一个名为 cat 的字符串对象。 2 将值更改为新字符串。我不认为这是你真正想要的。
要添加新的背景过滤器,以上面的分离方式,它将是:
initObject.backgroundFilters.cat = ['A', 'B'];
//Line above would give you this type of definition within the initObject (at runtime):
backgroundFilters: {
category: ['Shirt', 'Shoes'],
department: ['Mens'],
cat: ['A','B']
},
为此,它将取决于框架对背景过滤器的期望。
希望有帮助。万事如意!纳什
我不太明白 - 你想让 backgroundFilters 类别作为结构化对象而不是纯字符串吗?如果你控制了整个API,你可以做一些类似的事情
...
backgroundFilters: {
category: [
new SearchSpring.Catalog.Category("Shirt"),
new SearchSpring.Catalog.Category("Shoes"),
new SearchSpring.Catalog.Category("MyNewCategory", "ANewValue")
],
department: 'Mens'
}
...
- 为什么我需要为扩展函数设置构造函数
- 如何在react组件构造函数中设置Interval
- 子类中的 JavaScript 设置构造函数
- 通过构造函数属性和运算符实例设置继承
- 在 JavaScript 中以编程方式设置构造函数参数
- 模拟“类”时,为什么要在 .prototype 属性中设置方法,而不是在构造函数本身中设置方法
- 在构造函数 JavaScript 中将属性设置为函数
- 在对象上正确设置原型构造函数
- Javascript对象构造函数和设置属性
- 为什么要设置原型's构造函数转换为其构造函数函数
- 如何在不更改为新对象的情况下设置对象的构造函数
- 在实例化对象(使用构造函数)时设置唯一的id
- 在函数构造函数中设置原型
- 在构造函数中,将构造对象设置为另一个对象
- 当我不知道构造函数的名字时,如何设置原型呢?
- 如何将构造函数对象的值设置为其他值的函数
- Javascript -在构造函数或构造函数的prototype属性中设置属性
- 在构造函数中设置的属性将覆盖原型上的属性
- 为什么要在构造函数之外设置React组件的状态?
- Javascript Subclassing.设置构造函数属性