[英]Can I combine variables into a javascript object?
我有以下代碼:
var submitHandler = function ($link, $form, close) {
var val = $form.valid();
var action = $form.attr('data-action')
var entity = $form.attr('data-entity')
var href = $form.attr('data-href');
var rownum = $link.attr('data-row');
var $row = $('#row_' + rownum);
var $submitBt = $('.block-footer button:contains("Submit")');
.....
.....
jsonSuccessModal(action, rownum, close, $form, $submitBt, $row);
}
function jsonSuccessModal(action, rownum, close, $form, $submitBt, $row) {
...
}
沒有很多參數,我可以在第一個代碼塊中組合變量,然后將代表組合的對象發送到jsonSuccessModal。 像匿名對象一樣?
var submitHandler = function (data) {
data.link; // Do something...
data.form; // Do something...
...
};
submitHandler({
link: "foo",
form: "form",
close: "close"
});
您可以創建自己的對象並將其發送。 當想要訪問數據時,它也將更加容易。 http://www.howtocreate.co.uk/tutorials/javascript/objects顯示了如何制作自己的對象
這是我在需要大量參數的函數上使用的一種模式(不過使用jQuery):
var myFunc = function (parameters) {
// any parameters not passed will be defaulted here
parameters = $.extend({
foo: 1,
bar: 'hello',
biz: false
}, parameters || {}); // default parameters to an empty object if it is not passed at all
// use the parameters like you normally would
var answer = 6 + parameters.foo;
};
// call the function using an object
myFunc({ foo: 2, bar: 'goodbye'}); // notice biz will be defaulted to false
如果您不想使用jquery,則可以使用類似這樣的方法來代替$.extend
(未經測試)
var extend = function (defaultObject, sourceObject) {
for (var key in defaultObject) {
if (!sourceObject.hasOwnProperty(key)) {
sourceObject[key] = defaultObject[key];
}
}
return sourceObject;
};
在一般情況下,您問題的答案為否-javascript不支持像Python( **kwargs
)這樣的關鍵字參數解包。 您可以嘗試“擴展” JavaScript以支持這種功能,但是代碼會很尷尬(因為該語言也沒有反射支持):
function paramNames(func) {
return func.toString().match(/\(([^)]+)\)/)[1].split(/[\s,]+/)
}
function callWithKwargs(func, args, thisptr) {
return func.apply(thisptr || this,
paramNames(func).map(function(e) { return args[e] }));
}
// example:
function foo(bar, baz, spam) {
console.log('bar', bar, 'baz', baz, spam, 'spam');
}
callWithKwargs(foo, {
spam: 'bacon',
baz: 'hello',
bar: 'barbar'
})
就是說,如果所涉及的函數是您的函數,則可以按照建議將對象簡單地傳遞給它。
是的,您可以像下面這樣
var submitHandler = function ($link, $form, close) {
var obj ={
val = $form.valid();
action = $form.attr('data-action')
entity = $form.attr('data-entity')
href = $form.attr('data-href');
rownum = $link.attr('data-row');
$row = $('#row_' + rownum);
$submitBt = $('.block-footer button:contains("Submit")');};
jsonSuccessModal(obj);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.