# 下面这几个函数里面为什么用call() 这种方式呢
function.prototype.bind = function () {
var self = this,
context = [].shift.call(arguments),
args = [].slice.call(arguments);
return function () {
return self.apply( context, [].concat.call(args, [].slice.call(arguments)) )
}
}
var objectFactory = function () {
var obj = new Object,
Constructor = [].shift.call( arguments );
......
}
var hasProp = {}.hasOwnProperty;
var extends = function ( child, parent ) {
for(var key in parent) {
if (hasProp.call( parent, key)) {
......
}
}
......
}
怪我咯2017-04-10 16:56:17
喔,原来是因为arguments是一个类数组对象,虽然他也有下标,但并非真正的数组,所以他不能和数组一样进行排序添加之类的操作,这种情况下 借用array.prototype对象上的方法,可以对arguments完成push,shift等操作,array.prototypr.slice()就可以吧arguments转换成真正的数组
(发布了问题,然后找到答案了,自问自答)