【发布时间】:2019-11-21 17:31:11
【问题描述】:
研究MDN web docs上写的find方法的polyfill,有一段我没有关注,让我分享代码
if (!Array.prototype.find) {
Object.defineProperty(Array.prototype, 'find', {
value: function(predicate) {
if (this == null) {
throw TypeError('"this" is null or not defined');
}
var o = Object(this);
var len = o.length >>> 0;
if (typeof predicate !== 'function') {
throw TypeError('predicate must be a function');
}
var thisArg = arguments[1];
var k = 0;
while (k < len) {
var kValue = o[k];
if (predicate.call(thisArg, kValue, k, o)) {
return kValue;
}
k++;
}
return undefined;
},
configurable: true,
writable: true
});
}
我的问题是表达式var o = Object(this);。这样做而不是var o = this 的目的是什么?在两种描述的情况下打印值都会返回相同的对象。
这是调用var o = new Object(this); 的缩写方式吗?
我已经从方法中删除了 cmets 以缩短文本,这里是 polyfill 实现的链接。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find#Polyfill
谢谢!
【问题讨论】:
-
你的答案在前面的评论中:
// 1. Let O be ? ToObject(this value).
标签: javascript