前端测试题!

李人 2017-08-23 07:47:33
请根据面对对象编程的思想,设计一个类型 Cash 用于表达人民币,使得:
class Cash {
}

const cash1 = new Cash(105);
const cash2 = new Cash(66);

const cash3 = cash1.add(cash2);
const cash4 = Cash.add(cash1, cash2);
const cash5 = new Cash(cash1 + cash2);

console.log(`${cash3}`, `${cash4}`, `${cash5}`);
在以上代码执行的时候,输出结果为:
1元7角1分, 1元7角1分, 1元7角1分


页面中已有 id 为 container 的 div,请实现如下函数 foo,满足后续执行需求:
function foo(n) {
/* 在此处填写实现 */
}

const bar = foo(5);
bar();
使得当函数 bar 执行的时候:
在 container 中动态创建 5 个按钮,使得每个按钮的显示内容分别为 1 到 5 的整数,点击每个按钮的时候,在控制台输出 n 的值,n 为该按钮的显示内容。
在 container 中创建显示内容为 all 的按钮,使得点击按钮时,按照从 1 到 5 的顺序逐条执行如下任务:延时 n 秒之后在控制台输出 n 的值。
延时 1 秒,输出 1
...
延时 5 秒,输出 5
要求:在 foo 方法体内,不得出现数字 5;不能引入第三方库,需要使用原生 JavaScript 操作 DOM 实现。
...全文
463 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2017-08-23
  • 打赏
  • 举报
回复
第二个

<div id="container"></div>
<script type="text/javascript">
function foo(n) {
	var div = document.getElementById("container");
	return function () {
		for (var i = 1; i <= n; i++) {
			var button = document.createElement("input");
			button.type = "button";
			button.value = i;
			button.onclick = function () {
				console.log(this.value);
			}
			div.appendChild(button);
		}
		var button = document.createElement("input");
		button.type = "button";
		button.value = "all";
		button.onclick = function () {
			for (let i = 1; i <= n; i++) {
				setTimeout(function(){
					console.log(i);
				}, i*1000);
			}
		}
		div.appendChild(button);
		
	};
}

const bar = foo(5);
bar();
</script>

  • 打赏
  • 举报
回复
class。。。es6语法了,写起来吃力,还是prototype来得顺手

<script>

    class Cash {
        constructor(money){
            this.money=money;
        }
        static add(){
            let c=new Cash();
            [...arguments].forEach(function(item){
                this.money=(this.money||0)+(item.money||0);
            }.bind(c));
            return c;
        }
        add(){
            return Cash.add(this,...arguments);
        }
        valueOf(){return this.money||0}
        toString(){
            let money=this.money||0;
            let v=Math.floor(this.money/100),s=v?v+'元':'';money-=v*100;
            v=Math.floor(money/10);s+=v?v+'角':'';money-=v*10;
            s+=money+'分';
            return s;
        }
    }
 
    const cash1 = new Cash(105);
    const cash2 = new Cash(66);

    const cash3 = cash1.add(cash2);
    const cash4 = Cash.add(cash1, cash2);
    const cash5 = new Cash(cash1 + cash2 );
    console.log(`${cash3}`, `${cash4}`, `${cash5}`);
</script>

<div id="container"></div>
<script>
    function foo(n) {
        return function(){
            var c=document.getElementById('container'),button;
            for(var i=1;i<=n;i++){
                button=document.createElement('button');
                button.innerHTML=i;
                button.onclick=function(){console.log(this.innerHTML)};
                c.appendChild(button);
            }
            button=document.createElement('button');
            button.innerHTML='all';
            button.onclick=function(){
                for(var i=1;i<=n;i++)setTimeout((function(i){return function(){console.log(i)}})(i),i*1000);
            }
            c.appendChild(button);
        }
    }

    const bar = foo(5);
    bar();
</script>


Web开发学习资料推荐
easyui datebox设置日期范围
easyui datagrid fitColumns:true失效解决办法
天际的海浪 2017-08-23
  • 打赏
  • 举报
回复

class Cash {
	constructor(nc) {
		this.nc = nc;
	}
	add(nc) {
		return new Cash(this.nc + nc);
	}
	static add(nc1,nc2) {
		return new Cash(nc1 + nc2);
	}
	valueOf() {
		return this.nc;
	}
	toString() {
		return this.nc.toString().replace(/(.)(..)$/,"$1元$2").replace(/(.)(.)$/,"$1角$2")+"分";
	}
}

const cash1 = new Cash(105);
const cash2 = new Cash(66);

const cash3 = cash1.add(cash2);
const cash4 = Cash.add(cash1, cash2);
const cash5 = new Cash(cash1 + cash2);

console.log(`${cash3}`, `${cash4}`, `${cash5}`);
李人 2017-08-23
  • 打赏
  • 举报
回复
在线等,有大神吗?

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧