前端考题:第二期,1-2 天更新一期,

712 阅读1分钟
原文链接: github.com

1.Js如何实现继承?

js通过构造函数来实现继承,因为js没有类。

//创建一个Dog的构造函数, 构造函数大写开头。
function Dog() {
}


// 通过注入prototype属性,来实现对象需要共享的属性和方法
Dog.prototype.call = function() {
    alert("汪")
}
//New 后面跟着构造函数
var dog1 = new Dog()

2.浏览器缓存

具体的内容太多了,推荐一篇文章讲的很棒
浅谈浏览器http的缓存机制


3.margin重叠的现象,如何解决?

上下相邻的普通元素,上下margin边距取其中较大的边距值。
比如:

div.top {
   margin-bottom: 30px;
} 
div.bottom {
   margin-top: 30px;
} 
// 此时它们之间还是只有30px。
  1. 元素使用padding
  2. 元素设置成inline-block
  3. 元素加float:left;

其他就不清楚了...


4.解释下浮动和它的工作原理?清除浮动的技巧

浮动元素脱离文档流,不占据空间。

1.使用空标签清除浮动,定义css clear:both. 问题增加了无意义标签。

2.浮动元素的父标签添加css属性overflow:auto; zoom:1; zoom:1用于兼容IE6。

3.使用after伪对象清除浮动。代码如下

.clearfix {
    zoom: 1;
}

.clearfix:after {
     visibility: hidden;
     display: block;
     font-size: 0;
     content: " ";
     clear: both;
     height: 0;
 }

5.利用函数编程思想写一个add(1)(1,2,3)()

利用函数编程的惰性求值, 下面是我写的

function add() {
  //把arguments转成array对象
  var _args = Array.prototype.slice.apply(arguments);

  return function() {
    if ( arguments.length > 0 ) {
      var newArgs = Array.prototype.slice.apply(arguments);
      _args = _args.concat(newArgs);
      return add.apply(null, _args)
    }

    return _args.reduce(function(a, b) {
      return a + b;
    })
  }
}

var a = add(1,2,3)(2)