javascript - 像 String 和 Number 等对象是否被视为 "constructor functions"?

标签 javascript

我已经阅读了几个星期的教程,我刚刚发现当我在构造函数上使用原型(prototype)属性时,该原型(prototype)属性上的键/值对将被复制到proto 新实例化对象的属性。

function F(){};
F.prototype.k = "v";
console.dir(F.k)//logs "undefined"
console.dir(F.prototype.k)//logs "v"

var o = new F;
console.dir(o.k)//logs "v"

因此,键“k”位于构造函数中的原型(prototype)属性上,然后将其传输到新实例化对象“o”的 proto 属性,这就是为什么可以像访问它一样访问它只是对象上的普通键/值对。好吧,这对我来说是有道理的......但我想了一下,我看到人们使用 new 关键字来创建诸如 String 之类的内置事物(尽管通常不会这样做)

var s = new String;

上面的代码是创建新字符串项的示例,就像基于构造函数实例化对象一样。这让我想知道“String 只是一个构造函数吗????!”所以我对此进行了测试:

console.dir(String.prototype)

我得到了附加到 s 的完全相同属性的完整列表。那么,“String”只是一个构造函数吗?这些项目似乎也有同样的行为:

console.dir(String.prototype);
console.dir(Number.prototype);
console.dir(Boolean.prototype);
console.dir(Array.prototype);
console.dir(Object.prototype);
console.dir(Function.prototype);
console.dir(Date.prototype);

它们的行为似乎都与构造函数完全相同。它们甚至全部大写而不是驼峰式。它们只是添加了一些内置功能的构造函数吗?

最佳答案

JavaScript中有6种数据类型:

  • bool 值
  • 数量
  • 字符串
  • 未定义

  • 对象

前五个是所谓的原始类型。三种基本类型(Boolean、Number 和 String)也有等效的对象实现。

每当您使用( bool |数字|字符串)文字时,您都在创建相应类型的值。

您还可以通过使用 new 运算符调用相应的构造函数来创建 bool 、数字和字符串对象:

var s = 'foo'; // type string
var s2 = new String('foo'); // type object

现在,您可以访问这两个属性的原因是 JavaScript 自动框 原始值。 IE。当您尝试访问原始值的属性时,它会暂时将该值转换为对象并访问该属性。

所以

var v = "foo";
alert(v.length);

本质上是

var v = "foo";
alert((new String(v)).length);
<小时/>

如果调用StringNumberBoolean函数而没有使用new 关键字,它们将返回一个原始值,这使得它们充当转换函数。

<小时/>

总结一下:每个函数都有一个prototype属性,每个函数都可以充当构造函数。是否真的取决于函数的实现。

关于javascript - 像 String 和 Number 等对象是否被视为 "constructor functions"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24540521/

相关文章:

javascript - 将特定 div 之后的所有内容移至不同标签下

javascript - enyo.app 卡在创建函数中

javascript - 如何仅使用 javascript 替换 iframe 源?

javascript - JS - 函数执行后延迟重新加载位置

javascript - 如何使用 JavaScript 将输入字段设置为只读?

javascript - 从一页移动到另一页

javascript - 如何在浏览器中跨页面保留 Cognito 身份

javascript - 使用 nicedit 编辑后查找内容的高度和宽度

javascript - undefined 不是一个对象(评估 '_this2.props.navigation.navigate' ) - React Native

javascript - 检索完整页面 HTML - jQuery