面试的心得(2017-6-19)

有幸和一位大神聊过,发现自己有好多地方都略显不足。

函数式编程和面向对象式编程?

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

将业务逻辑细化,抽象,封装成一个个功能函数,并借助语言自带的高阶函数api,将整个业务流程转化为函数之间的相互调用,这就是函数式编程。

什么是对象?

对象就是属性和方法的集合,所有的数据类型都是对象,他们都有自己的默认支持的方法。

Array.prototype.slice.call

查看jQuery的源代码,会看到类似:

slice = Array.prototype.slice,

array = Array.prototype.slice.call( array, 0 );

的代码。

干嘛用的呢?

作用就是:将类似数组的对象转换为真实的数组。

真实数组具有slice方法,可以对数组进行浅复制(不影响原数组),返回的依然是数组。

类似数组虽然有length属性,可以使用for循环遍历,却不能直接使用slice方法,会报错!但是通过Array.prototype.slice.call则不会报错,本身(类似数组)被从头到尾slice复制了一遍——变成了真实数组!

上一集demo中函数内部的arguments是应该都熟知的类似数组,于是:

Array.prototype.slice.call(arguments)

bind函数,改变上下文

1
2
3
4
5
6
7
8
9
10
11
12
13
var OOO = {
color: "#cd0000",
element: $("#text"),
events: function() {
$("input[type='button']").addEventListener("click", function(e) {
this.element.style.color = this.color;
}.bind(this));
return this;
},
init: function() {
this.events();
}
};

为IE6~8自定义bind方法

1
2
3
4
5
6
7
8
9
10
if (!function() {}.bind) {
Function.prototype.bind = function(context) {
var self = this
, args = Array.prototype.slice.call(arguments);
return function() {
return self.apply(context, args.slice(1));
}
};
}

很多原理性的知识点无法从碎片连成面

看来在接下去的时间里,必须再好好学习基础知识。

© 2018 Qing的前端开发Blog All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero