我不知道Object(this)的意思

时间:2016-08-25 01:25:11

标签: javascript

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/fill

有一行像

// Steps 1-2.
if (this == null) {
  throw new TypeError('this is null or not defined');
}

var O = Object(this);          // <- WHAT IS THIS???????????

// Steps 3-5.
var len = O.length >>> 0;

// Steps 6-7.
var start = arguments[1];
var relativeStart = start >> 0;

// Step 8.
var k = relativeStart < 0 ?
  Math.max(len + relativeStart, 0) :
  Math.min(relativeStart, len);

// Steps 9-10.
var end = arguments[2];
var relativeEnd = end === undefined ?
  len : end >> 0;

// Step 11.
var final = relativeEnd < 0 ?
  Math.max(len + relativeEnd, 0) :
  Math.min(relativeEnd, len);

// Step 12.
while (k < final) {
  O[k] = value;
  k++;
}

// Step 13.
return O;

我无法将O指定为Object(this)。

它是为了可读性而编写还是有任何具体的分配原因?

2 个答案:

答案 0 :(得分:3)

正如对代码的评论中所建议的那样,本节将准确地填写the spec中记录的第一步。

  
      
  1. 设O为ToObject(此值)。
  2.   
  3. ReturnIfAbrupt(O)。
  4.   

虽然有点无序,但这是在执行ToObject(this value)

的功能
var O = Object(this);

基本上,如果在非对象上调用它,则应将非对象强制转换为Object

例如,如果我们在本机支持此方法的JavaScript引擎中运行这些大多数无意义的代码,我们会看到返回Number对象实例。

Array.prototype.fill.call(123);

该行将确保polyfill的结果相同。

答案 1 :(得分:1)

当参数已经是对象时,Object构造函数返回其参数。如果它不是一个对象,它返回参数的“objectified”版本:一个String实例,如果它是一个字符串,一个Number实例,如果它是一个数字,等等。

有问题的函数有点奇怪,特别是this的值通常无论如何都是。它不会,但是你必须尽可能地使用不是对象的this值来到达polyfill的内部。