2017-03-09 46 views
0

我知道它已被問及回答如何設置一個JavaScript函數的默認參數by Tilendor調用JavaScript方法時繞過set參數嗎?

我想知道如果我有一個函數包含一系列布爾值。
例如,一個名爲'anAnimal'的函數,作爲默認值,我將三個屬性的值設置爲false。
飛,游泳,爬。

如果我只想傳遞一個真實的參數給我的屬性稱爲爬升,我該怎麼辦?

當我在方法中調用時,我必須傳入一個假的值來進行飛行和游泳,儘管我已經將它們預定義爲false。


這就是我試圖和我想的結果說真的而不是假

function anAnimal (fly = false, swim = false, climb = false) { 
 
    this.canFly = fly; 
 
    this.canSwim = swim; 
 
    this.canClimb = climb; 
 
} 
 

 
var cat = new anAnimal(true) 
 

 
var theCat = 'This cat can climb: ' + cat.canClimb; 
 

 
document.write(theCat);

+0

你必須把所有的論點。在您的例子你的貓能飛。 (嘗試'cat.canFly') - 因此將cat調用改爲'var cat = new Animal(false,false,true)' – evolutionxbox

+1

爲什麼不使用setter? 'setSwim()''setFly()'...?我認爲這是更多的面向對象 – teeyo

+0

函數重載是不可能在JS中。您需要使用所有參數創建對象。 –

回答

1

你可以傳遞一個對象,而不是爭論和填充基於輸入的默認選項。

function anAnimal(obj) { 
 
    var defaults = { 
 
    fly: false, 
 
    swim: false, 
 
    climb: false 
 
    } 
 

 
    //copy the values of all enumerable own properties from one or more source objects to a target object. 
 
    Object.assign(defaults, obj); 
 

 
    //Assign the values 
 
    this.canFly = defaults.fly; 
 
    this.canSwim = defaults.swim; 
 
    this.canClimb = defaults.climb; 
 
} 
 

 
var cat = new anAnimal({ 
 
    climb: true 
 
}); 
 
var theCat = 'This cat can climb: ' + cat.canClimb; 
 
document.write(theCat);


不過,我會建議使用制定者即setClimb()

+0

這個答案完美..我將不得不研究setter。謝謝。 – Mark