慕森卡
这些都是小知识点,还是系统的学习比较好,图快反而会适得其反。1.function(){}();这是什么写法啊?不是应该是(function(){}())这样写吗?后者的作用是将里面的立即执行函数转换为函数表达式,而你的代码中赋值语句本身就是一个表达式,所以不用转换了。2.注释中“+price 转化为数字类型”,这是什么原理?百度JS中+号操作符,或者查MDN,查规范都行。3.按照这样写出来最后的结果并不是数字,而是Object{},到底在哪里出错了呢?new一个构造函数的时候,返回的是构造函数的实例,如果构造函数里返回的是一个对象,数组,函数,则返回该对象,数组,函数,而你返回的不是这些,是一个基本数据类型,他会自动忽略掉基本数据类型。所以,改法如下:// 价格策略对象var PriceStrategy = function () { // 内部算法对象
var strategy = { // 满100返30
return30 : function ( price ) {
// parseInt可通过~~、|等运算符替换,要注意此时price要在[-2147483648,2147483648]之间
// +price 转化为数字类型
return +price + parseInt( price / 100 ) * 30 ;
}, // 满100返50
return50 : function ( price ) {
// parseInt可通过~~、|等运算符替换,要注意此时price要在[-2147483648,2147483648]之间
// +price 转化为数字类型
return +price + parseInt( price / 100 ) * 50 ;
}, // 9折
percent90 : function ( price ) { // JavaScript在处理小数时有BUG,故运算之前转化为整数
return price * ( 100 * 90 / 10000 ) ;
}, percent80 : function ( price ) { return price * ( 100 * 80 / 10000 ) ;
}, percent50 : function ( price ) { return price * ( 100 * 50 / 10000 ) ;
}
}; // 算法调用接口
return function ( algorithm , price ) { // 如果算法存在,则调用算法,否则返回false
var o = {};
strategy[algorithm] && (o.result = strategy[algorithm](price)); return o;
}
}();var price = new PriceStrategy ( 'percent50' , '345.32' ).result;console.log ( price );