1.设计一个受保护的累加数据,只能通过一个方法往里面添加数据并返回累加结果。
var add = (function () {
var counter = 0;
return function () {console.log("第一次累加结果:"+(counter+=1));}
})();
add()
add()
add()
运行截图
2.设计3个类,形状类、矩形类(继承形状类)、正方形类(继承矩形类),创建一个矩形对象和一个正方形对象,分别求取其面积。
//设计3个类,形状类、矩形类(继承形状类)、正方形类(继承矩形类),创建一个矩形对象和一个正方形对象,分别求取其面积。
function Shape() {
this.Area = function(a,b){
return a*b;
}
}
//子类型
function Rectangle(length,wide) {
this.length = length
this.wide = wide;
};
Rectangle.prototype = new Shape() // 子类型的原型为父类型的一个实例对象
function Square(side) {
this.side = side;
}
Square.prototype = new Rectangle();
var Rectangles1 = new Rectangle(3,5);
var Squares2 = new Square(6);
console.log("矩形面积为:"+Rectangles1.Area(Rectangles1.length,Rectangles1.wide));
console.log("正方形面积为:"+Squares2.Area(Squares2.side,
Squares2.side));
测试:
矩形长:3
矩形宽:5
正方形边长:3
运行结果:
矩形面积为:15
正方形面积为:36
运行截图
3.设计一个学生类,当对其成绩属性赋值时,如果成绩不在0~100之间则抛出异常。
var Student = {
_grade:null
};
Object.defineProperty(Student,"Grade",{
get:function(){
try{
if (this._grade==null){
throw "该同学成绩未输入。"
}
else if(this._grade>100)
throw "成绩为"+this._grade+" 成绩超过100,请重新输入!!"
else if(this._grade<0)
throw "成绩为"+this._grade+" 成绩低于 0 ,请重新输入!!"
else
return "该同学成绩正确,为"+this._grade;
}
catch(err){
return err;
}
},
set: function(newGrade){
this._grade = newGrade;
}
});
//console.log(Object.getOwnPropertyDescriptor(Student,"Grade"));
console.log("原来成绩为:"+Student.Grade);
Student.Grade=155;
console.log(Student.Grade)
测试1:
输入成绩:-55
运行结果:
原来成绩为:该同学成绩未输入。
成绩为-55 成绩低于 0 ,请重新输入!!
测试2:
输入成绩:155
运行结果:
原来成绩为:该同学成绩未输入。
成绩为155 成绩超过100,请重新输入!!
测试3:
输入成绩:55
运行结果:
原来成绩为:该同学成绩未输入。
该同学成绩正确,为55
运行截图:
结构框架
测试1:
测试2:
测试:3:
4.编写一个async函数,用于等待指定秒数。
async function a(){//async函数
console.log(21);
setTimeout(x=>console.log(22,x), 3000, 'OK');//异步操作,不会阻塞
console.log(23);
}
function b(f,t,m){//f=1:模拟成功,f=0:模拟失败,t:延时,m:信息
console.log(31);
return new Promise((resolve,reject)=>{//可阻塞
console.log(32);
setTimeout(x=>{
console.log(33);
if(f)resolve(x);//成功
else reject(x);//失败
console.log(34);
},t,m);
console.log(35);
});
}
console.log(1);
(async ()=>{//匿名async函数,await只能出现在async函数体中
try{
console.log(11);
console.log(12,await a());//异步操作未阻塞
console.log(13,await b(0,1000,'reject'));//阻塞,抛出异常,后续代码不再执行
console.log(14,await b(1,1000,'resolve'));//阻塞,传回数据
console.log(15);
}catch(err){
console.log(16,err);//捕获异常
}
})();
console.log(2);
测试:
等待秒数: 22
运行结果:22 ok
运行截图: