JS5模拟类

Posted 刘选航

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS5模拟类相关的知识,希望对你有一定的参考价值。

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6     </head>
 7     <body>
 8         <h1>结算程序</h1>
 9         <p>
10             <input type="text" placeholder="原价" id="money" />
11         </p>
12         <p>
13             <select id="level">
14                 <option value="0">普通顾客</option>
15                 <option value="1">VIP会员</option>
16                 <option value="2">金卡会员</option>
17                 <option value="3">砖石会员</option>
18             </select>
19         </p>
20         <p>
21             <input type="button"id="btn" value="结算" />
22         </p>
23         <p id="result"></p>    
24         <script src="test_4es5.js" type="text/javascript" charset="utf-8"></script>
25     </body>
26 </html>

 

原型定义对象的方式缺点是较为麻烦,但是好处是创建对象里面不包括变量和方法的声明

原型定义的对象创建的速度快,占用内存小,推荐使用

 1 function Calculator() {
 2 
 3 }
 4 Calculator.prototype.money = null;
 5 Calculator.prototype.level = null;
 6 Calculator.prototype.pay = function() {
 7     if(this.level == 0) {
 8         return this.money;
 9     } else if(this.level == 1) {
10         return `${this.money * 0.96}元`;
11     } else if(this.level == 2) {
12         return this.money * 0.92;
13     } else if(this.level == 3) {
14         return this.money * 0.85;
15     } else {
16         throw "会员等级错误";
17     }
18 }
19 
20 function DoubleElevenCalculator() {
21         
22 };
23 DoubleElevenCalculator.prototype = new Calculator();
24 DoubleElevenCalculator.prototype.pay = function() {
25     if(this.level == 0) {
26         var num = Math.floor(this.money / 200);
27         return `实际需支付${this.money}元,赠送${num}张50元代金券`;
28     } else if(this.level == 1) {
29         var num = Math.floor(this.money / 500);
30         return `实际需支付${this.money*0.9}元,赠送${num}张100元餐券`
31     } else if(this.level == 2) {
32         var num = Math.floor(this.money / 300);
33         return `实际需支付${this.money*0.85}元,赠送${num}张100元代金券`;
34     } else if(this.level == 3) {
35         var num = Math.floor(this.money / 200);
36         return `实际需支付${this.money*0.8}元,赠送${num}张100元代金券`;
37     } else {
38         throw "会员等级错误";
39     }
40 }
41 
42 var btn = document.querySelector("#btn");
43 btn.addEventListener("click", function() {
44     //var calculator = new Calculator();
45     var calculator = new DoubleElevenCalculator();
46     calculator.money = document.querySelector("#money").value;
47     var money = new Number(money);
48     calculator.level = document.querySelector("#level").value;
49     var level = new Number(level);
50     var temp = calculator.pay();
51     document.querySelector("#result").innerHTML = temp;
52 
53 });
 

 

 1 /*
 2  * 发法一new Object()
 3  * 对象只能调用一次,不能重复利用,也不能被继承
 4  */
 5 
 6 /*
 7 var plane = new Object();
 8 plane.speed=800;
 9 plane.fly=function(){
10     console.log("飞行速度"+this.speed);
11 }
12 plane.fly();
13 */
14 
15 /*
16  * 方法二json
17  */
18 /*
19  var plane={
20     speed:800,
21     fly:function(){
22         console.log("飞行速度"+this.speed);
23     }
24 }
25 plane.fly();
26  */
27 
28 /*
29  * 方法3函数模拟类
30  * 不能继承
31  */
32 /*
33 function Plane(){
34     this.speed=800;
35     this.fly=function(){
36         console.log("飞行速度"+this.speed);
37     }
38 }
39 var plane =new Plane();
40 plane.fly();
41 */
42 
43 /*
44  * 方法4    最好
45  */
46 function Plane() {
47 
48 }
49 Plane.prototype.speed = null;
50 Plane.prototype.fly = function() {
51     console.log("飞行速度" + this.speed);
52 }
53 var plane = new Plane();
54 plane.speed = 800;
55 plane.fly();
56 
57 function FightPlane() {
58 
59 }
60 FightPlane.prototype = new Plane(); //继承父类prototype所有的内容
61 FightPlane.prototype.fly = function() {
62     console.log("战斗机飞行速度" + this.speed)
63 }
64 plane = new FightPlane();
65 plane.speed = 2000;
66 plane.fly();

 

以上是关于JS5模拟类的主要内容,如果未能解决你的问题,请参考以下文章

js5——页面转换

JS5(事件)

js5种this绑定简析

学习EXT.JS5时的重点载图

你不知道的JS5-原型

js5:框架的使用,使框架之间无痕连接