项目提成计算器——JavaScript原型链的使用

简介: 项目提成为只读模式,要求有3个角色可以选择,分别为程序员、项目经理、销售人员。效果图如下,要按照每个角色,点击“计算”按钮,可以进行计算。

📚题目要求

项目提成为只读模式,要求有3个角色可以选择,分别为程序员、项目经理、销售人员。效果图如下,要按照每个角色,点击“计算”按钮,可以进行计算。

image.gif

📚题目提供的代码如下

(本题的部分考点内容与20226月考试题目不一样)

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Document</title><(1)>        * {
        margin: 0;
        padding: 0;
        }
        header {
        text-align: center;
        margin-bottom: 15px;
        }
        #box {
        margin: 20px auto 0;
        width: 300px;
        text-align: center;
        }
        #bonus {
        height: 50px;
        width: 280px;
        background-color: #f3f3f3;
        }
        #benefit {
        height: 25px;
        width: 140px;
        }
        (2) {
        height: 22px;
        width: 130px;
        vertical-align: bottom;
        }
        #count {
        padding-top: 10px;
        padding-right: 11px;
        text-align: right;
        }
        #countBtn {
        height: 25px;
        width: 70px;
        text-align: center;
        background-color: #ffffff;
        cursor: pointer;
        }
        #benefit,
        #roles#countBtn,
        #bonus {
        border: 1px solid #d4d4d4;
        }
</(1)><(4)>        function roles() {
            // 程序员提成计算
            this.programmer = (5) {
                if ((6) > 10000) {
                    return data * 0.05;
                } else if (data >= 2000) {
                    return 50;
                } else {
                    return 0;
                }
            }
            // 项目经理提成计算
            this.manager = (5) {
                if ((6) > 20000) {
                    return data * 0.2;
                } else {
                    return data * 0.1;
                }
            }
            // 销售人员提成计算
            this.salesman = (5) {
                if ((6) > 100000) {
                    return data * 0.3;
                } else if (data >= 50000) {
                    return data * 0.2
                } else {
                    return data * 0.05;
                }
            }
        }
        // 提成对象
        function bonus() {
            // 项目收益
            this.benefit = 0;
        }
        bonus.(7).setBenefit = function (data) {
            // 设置项目收益
            this.benefit = data;
        }
        // 设置bonus的原型链roles
        bonus.(8) = new roles();
        bonus.(7).getBonus = function (role) {
            // 通过角色策略方法计算返回提成
            (9) role(this.benefit);
        }
        // 创建bonus的实例对象
        var bonusCount = (10) bonus();
        // 角色策略筛选
        var strategies = {
            "1": function () {
                // 程序员角色策略计算
                return bonusCount.(11)(bonus.programmer);
            },
            "2": function () {
                // 项目经理角色策略计算
                return bonusCount.(11)(bonus.manager);
            },
            "3": function () {
                // 销售人员角色策略计算
                return bonusCount.(11)(bonus.salesman);
            }
        }
        function countFun() {
            // 获取项目受益值
            var benefit = document.(13)("benefit").value;
            // 获取选择的角色值
            var roles = document.(13)("roles").value;
            // 设置项目收益
            bonusCount.(12)(benefit);
            //角色策略对应的提成计算值
            document.(13)("bonus").value = strategies[role]();
        }
</(4)></head><body><divid="box"><header>项目提成计算器</header><divid="dataBox"><inputtype="text"id="bonus"(14)="(14)"placeholder="项目提成"></div><inputtype="text"id="benefit"value="0"><selectname=""id="roles"><optionvalue="1">程序员</option><optionvalue="2">项目经理</option><optionvalue="3">销售人员</option></select><divid="count"><inputtype="button"id="countBtn"value="计算"(15)="countFun()"></div></div></body></html>

image.gif

📚完整代码如下

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Document</title><style>        * {
margin: 0;
padding: 0;
        }
header {
text-align: center;
margin-bottom: 15px;
        }
#box {
margin: 20pxauto0;
width: 300px;
text-align: center;
        }
#bonus {
height: 50px;
width: 280px;
background-color: #f3f3f3;
        }
#benefit {
height: 25px;
width: 140px;
        }
#roles {
height: 22px;
width: 130px;
vertical-align: bottom;
        }
#count {
padding-top: 10px;
padding-right: 11px;
text-align: right;
        }
#countBtn {
height: 25px;
width: 70px;
text-align: center;
background-color: #ffffff;
cursor: pointer;
        }
#benefit,
#roles#countBtn,
#bonus {
border: 1pxsolid#d4d4d4;
        }
</style><script>functionroles() {
// 程序员提成计算this.programmer=function(data) {
if (data>10000) {
returndata*0.05;
                } elseif (data>=2000) {
return50;
                } else {
return0;
                }
            }
// 项目经理提成计算this.manager=function(data) {
if (data>20000) {
returndata*0.2;
                } else {
returndata*0.1;
                }
            }
// 销售人员提成计算this.salesman=function(data) {
if (data>100000) {
returndata*0.3;
                } elseif (data>=50000) {
returndata*0.2                } else {
returndata*0.05;
                }
            }
        }
// 提成对象functionbonus() {
// 项目收益this.benefit=0;
        }
bonus.prototype.setBenefit=function (data) {
// 设置项目收益this.benefit=data;
        }
// 设置bonus的原型链rolesbonus.__proto__=newroles();
bonus.prototype.getBonus=function (role) {
// 通过角色策略方法计算返回提成returnrole(this.benefit);
        }
// 创建bonus的实例对象varbonusCount=newbonus();
// 角色策略筛选varstrategies= {
"1": function () {
// 程序员角色策略计算returnbonusCount.getBonus(bonus.programmer);
            },
"2": function () {
// 项目经理角色策略计算returnbonusCount.getBonus(bonus.manager);
            },
"3": function () {
// 销售人员角色策略计算returnbonusCount.getBonus(bonus.salesman);
            }
        }
functioncountFun() {
// 获取项目受益值varbenefit=document.getElementById("benefit").value;
// 获取选择的角色值varrole=document.getElementById("roles").value;
// 设置项目收益bonusCount.setBenefit(benefit);
//角色策略对应的提成计算值document.getElementById("bonus").value=strategies[role]();
        }
</script></head><body><divid="box"><header>项目提成计算器</header><divid="dataBox"><inputtype="text"id="bonus"readonly="readonly"placeholder="项目提成"></div><inputtype="text"id="benefit"value="0"><selectname=""id="roles"><optionvalue="1">程序员</option><optionvalue="2">项目经理</option><optionvalue="3">销售人员</option></select><divid="count"><inputtype="button"id="countBtn"value="计算"onclick="countFun()"></div></div></body></html>

image.gif

📚题目分析

①关于该试题整体难度为难,考核点其实还算常规考核点

②本题的考核主要是JavaScript,包括了表单的只读属性和点击事件,js定义函数,js获取元素等知识,这些属于较简单的题目。

③此题的项目提成计算器使用了原型和原型链,如果之前没了解过这个知识点,这题就难做了不过也可以写对10空以上的这题,这块知识点是JavaScript中相对难以理解的内容,在完成某一个功能时,一般使用的是面向过程的编程思想。

📚实现效果

image.gif

相关文章
|
7月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
350 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
6月前
|
JavaScript 安全 前端开发
关于Node.js,一定要学这个10+万Star项目 !!
一篇关于Node.js的宝藏项目——Node.js Best Practices。该项目在GitHub上已有102k Star,汇集了100+条最佳实践,涵盖架构、安全、性能等多方面。每条实践不仅有简明说明和详细解释,还附带代码示例及资源链接。文中通过三个实战案例(利用CPU多核、避免阻塞事件循环、使用中间件处理错误)展示了其实际应用价值,并推荐了几条对前端转Node.js开发者特别有用的最佳实践。强烈建议每位Node.js开发者学习此项目,理解“怎么做”与“为什么要这么做”,以提升开发能力。
199 3
|
8月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
272 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
8月前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
358 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
8月前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
334 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
8月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
348 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
7月前
|
数据采集 JavaScript 前端开发
一站搞定原型链:深入理解JavaScript的继承机制
综上所述,可以得出: 1. 原型链是对象通过原型实现属性和方法继承的一种机制。 2. 每个对象都有一个 __proto__ 属性,指向它的原型对象。 3. 每个函数(包括构造函数)都有一个 prototype 属性,指向一个对象,这个对象的属性和方法可以被实例共享。 4. 构造函数创建对象时,新对象的 __proto__ 属性指向构造函数的 prototype 对象。 5. 继承可以通过设置原型对象实现,也可以使用 ES6 的 class 语法糖。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
11月前
|
JavaScript 前端开发
JavaScript 原型链的实现原理是什么?
JavaScript 原型链的实现原理是通过构造函数的`prototype`属性、对象的`__proto__`属性以及属性查找机制等相互配合,构建了一个从对象到`Object.prototype`的链式结构,实现了对象之间的继承、属性共享和动态扩展等功能,为 JavaScript 的面向对象编程提供了强大的支持。
|
11月前
|
JavaScript 前端开发
原型链在 JavaScript 中的作用是什么?
原型链是 JavaScript 中实现面向对象编程的重要机制之一,它为代码的组织、复用、扩展和多态性提供了强大的支持,使得 JavaScript 能够以简洁而灵活的方式构建复杂的应用程序。深入理解和熟练运用原型链,对于提升 JavaScript 编程能力和开发高质量的应用具有重要意义。
|
11月前
|
CDN
如何在项目中使用Moment.js库?
如何在项目中使用Moment.js库?

热门文章

最新文章