javascript - 关于书上的demo有几个问题想问
大家讲道理
大家讲道理 2017-04-11 13:18:50
[JavaScript讨论组]

1.function(){}();这是什么写法啊?不是应该是(function(){}())这样写吗?
2.注释中“+price 转化为数字类型”,这是什么原理?
3.按照这样写出来最后的结果并不是数字,而是Object{},到底在哪里出错了呢?如果去掉function(){}()后面的括号输出的结果是function(algorithm, price),我有点蒙,看了半天不知道错在哪里,怎么修改。希望好心人能指点一二。

// 价格策略对象
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
        return strategy[algorithm] && strategy[algorithm](price);
    }
}();

var price = new PriceStrategy ( 'percent50' , '345.32' );
console.log ( price );
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(1)
怪我咯

这些都是小知识点,还是系统的学习比较好,图快反而会适得其反。

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 );

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号