JavaScript 对象的有趣本质
在编程的深处,JavaScript 的世界呈现出意想不到的转折:并非一切都是对象。虽然许多介绍性文本暗示“几乎所有东西”都属于这种分类,但仔细检查会发现不同的事实。
对象的核心是通过方法和属性封装功能。例如,数组就适合这个模型及其固有的键值对。然而,当涉及到“字符串”、“数字”和“函数”时,界限就变得模糊了。
这些实体可能看起来类似于函数,对输入执行转换并产生输出,而无需明显访问属性或方法。在这种情况下,点表示法仍然明显缺失。
包装难题
揭开谜团,我们发现了一个微妙的区别:这些原语,正如它们所知,缺乏物体的真实本质。相反,它们被包裹在对象服装中,即字符串、数字和布尔值。这些包装器拥有方法和属性,赋予对象行为的错觉。
例如,考虑以下代码:
var s = "foo"; var sub = s.substring(1, 2); // sub becomes "o"
在幕后,JavaScript 执行一系列隐藏步骤:
幻觉属性
虽然基元似乎可以分配属性,但这种尝试被证明是徒劳的,如以下示例所示:
var s = "foo"; s.bar = "cheese"; alert(s.bar); // undefined
发生这种情况是因为该属性是在短暂的 String 包装对象,该对象会立即被丢弃,导致属性无法访问。
功能:伪装的对象
与基元不同,函数是继承自 Object 的成熟对象。这意味着它们拥有对象的所有功能,包括拥有自己的属性的能力。看看这个例子:
function foo() {} foo.bar = "tea"; alert(foo.bar); // tea
结论
在 JavaScript 中,并不是所有东西都披着对象的外衣。由对象包装器伪装的原语创建了对象行为的错觉。只有通过更深入地理解 JavaScript 的复杂性,其对象的真实本质才会变得显而易见。
以上是JavaScript 基元真的是对象吗?的详细内容。更多信息请关注PHP中文网其他相关文章!