2016-11-14 203 views
1

假設我有一個帶參數的函數。如何通過匿名函數爲對象屬性賦值?

在這種情況下,我使用matchHeight,但我的問題是一般的。

我在這樣的變量中設置了所有的選項。

var options = { 
    byRow: true, 
    property: 'height', 
    remove: true, 
}; 

然後將它傳遞給函數:現在

$('.some_class').matchHeight(options); 

,我希望能夠用函數動態評估的「刪除」屬性。我的猜測是用這樣的東西:

var options = { 
    byRow: true, 
    property: 'height', 
    // remove: true, 
    remove: function(){ return true; } 
}; 

但是,它不起作用。什麼是正確的方法來做到這一點? 更新:更清晰。 matchHeight將刪除作爲boolean property,而不是作爲一項功能。

我的主要目的是使用函數'模擬'一個布爾值,如remove: true

+0

你是什麼意思*不起作用*?該對象大致正確。它取決於它如何在'matchHeight'中消耗,而且你還沒有顯示這個代碼。如果這不是你的代碼,你不能換一個布爾函數來實現這種功能。 'options.remove' vs'options.remove()',它們的調用方式不同 – Liam

+0

'options [「remove」]'? – guest271314

+0

matchHeight需要刪除爲[布爾屬性](https://github.com/liabru/jquery-match-height#usage) – Sebastian

回答

1

你的方法應該工作 - 請這個片段:

var options = { 
 
    byRow: true, 
 
    property: 'height', 
 
    // remove: true, 
 
    remove: function(){ return true; } 
 
}; 
 

 
function myFunc(options) { 
 
    console.log(options.remove()) 
 
} 
 

 
myFunc(options)

2

如果​​是一個函數,那麼你就必須真正把它叫做:

options.remove() 

如果你想使這個工作只有​​,你必須define the property with a getter

var options = { 
 
    byRow: true, 
 
    property: 'height' 
 
}; 
 

 
Object.defineProperty(options, 'remove', { 
 
    get: function() { return true; } 
 
}); 
 

 
console.log(options.remove);

+0

謝謝。不,'remove'是一個[布爾屬性](https://github.com/liabru/jquery-match-height#usage) 不幸的是,你的代碼不工作 – Sebastian

+0

呃...定義「不工作」。當你點擊上面的「運行代碼片段」時,非常* *正在工作。 – deceze