多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# **apply 和 call** * * * * * 对于 `API` 的使用,例如:`obj.hasOwnProperty(key)` 这类 `API` 就需要使用 `apply` 和 `call` 的第一个参数,指定 `this`。 ``` var LimitableMap = function (limit = 10) { this.limit = limit this.map = {} this.keys = [] } var hasOwnProperty = Object.prototype.hasOwnProperty LimitableMap.prototype.set = function (key, value) { var map = this.map var keys = this.keys // 如果在map自身属性上没有key if (!hasOwnProperty.call(map, key)) { // 如果保存的key等于给定的限制值 if (keys.length === this.limit) { var shiftKey = keys.shift() delete map[shiftKey] } // 把设置的key值保存在keys数组里 keys.push(key) } // 经过上面判断删除值之后就可以添加新值了 map[key] = value } LimitableMap.prototype.get = function (key) { return this.map[key] } module.exports = LimitableMap ``` 类似上面代码中的 `object.hasOwnProperty`,`object` 就是 `this`,所以需要在 `apply` 或者 `call` 中指定 `this` 参数。