1 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
這些都是小知識(shí)點(diǎn),還是系統(tǒng)的學(xué)習(xí)比較好,圖快反而會(huì)適得其反。
1.function(){}();這是什么寫法???不是應(yīng)該是(function(){}())這樣寫嗎?
后者的作用是將里面的立即執(zhí)行函數(shù)轉(zhuǎn)換為函數(shù)表達(dá)式,而你的代碼中賦值語句本身就是一個(gè)表達(dá)式,所以不用轉(zhuǎn)換了。
2.注釋中“+price 轉(zhuǎn)化為數(shù)字類型”,這是什么原理?
百度JS中+號(hào)操作符,或者查MDN,查規(guī)范都行。
3.按照這樣寫出來最后的結(jié)果并不是數(shù)字,而是Object{},到底在哪里出錯(cuò)了呢?
new一個(gè)構(gòu)造函數(shù)的時(shí)候,返回的是構(gòu)造函數(shù)的實(shí)例,如果構(gòu)造函數(shù)里返回的是一個(gè)對象,數(shù)組,函數(shù),則返回該對象,數(shù)組,函數(shù),而你返回的不是這些,是一個(gè)基本數(shù)據(jù)類型,他會(huì)自動(dòng)忽略掉基本數(shù)據(jù)類型。
所以,改法如下:
// 價(jià)格策略對象var PriceStrategy = function () { // 內(nèi)部算法對象 var strategy = { // 滿100返30 return30 : function ( price ) { // parseInt可通過~~、|等運(yùn)算符替換,要注意此時(shí)price要在[-2147483648,2147483648]之間 // +price 轉(zhuǎn)化為數(shù)字類型 return +price + parseInt( price / 100 ) * 30 ; }, // 滿100返50 return50 : function ( price ) { // parseInt可通過~~、|等運(yùn)算符替換,要注意此時(shí)price要在[-2147483648,2147483648]之間 // +price 轉(zhuǎn)化為數(shù)字類型 return +price + parseInt( price / 100 ) * 50 ; }, // 9折 percent90 : function ( price ) { // JavaScript在處理小數(shù)時(shí)有BUG,故運(yùn)算之前轉(zhuǎn)化為整數(shù) return price * ( 100 * 90 / 10000 ) ; }, percent80 : function ( price ) { return price * ( 100 * 80 / 10000 ) ; }, percent50 : function ( price ) { return price * ( 100 * 50 / 10000 ) ; } }; // 算法調(diào)用接口 return function ( algorithm , price ) { // 如果算法存在,則調(diào)用算法,否則返回false var o = {}; strategy[algorithm] && (o.result = strategy[algorithm](price)); return o; } }();var price = new PriceStrategy ( 'percent50' , '345.32' ).result;console.log ( price );
添加回答
舉報(bào)