首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript中的对象与原型

Javascript中的对象与原型
EN

Stack Overflow用户
提问于 2018-11-07 23:15:33
回答 1查看 1.1K关注 0票数 5

我试图理解原型,并处理一些干扰,因为我对各种其他结构的理解。

有人能解释一下Javascript中的对象是什么吗?为了澄清,我知道什么是对象(小写'o'),但不知道什么对象(大写'O')是什么。我知道在JS中创建的任何对象都有一个隐藏的原型对象。prototype对象既是父对象的属性,也是对象本身,它自己的属性可以使用以下命令objectName.prototype;访问,另外,prototype对象的属性中包括一个prototype对象。对象与原型对象相同吗?如果不是,什么是对象--全局对象?它/它们与窗口对象或全局对象的关系如何?

提前谢谢你的帮助。我在网上搜索过这个问题的答案,却找不到一个既容易理解又能理解的答案。虽然我不是一个10岁的孩子,但如果你能像我一样向我解释一下,我不会生气,也会非常感激你的努力。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-07 23:22:16

我知道在JS中创建的任何对象都有一个隐藏的原型对象。

基本上是的。每个对象都有一个内部属性,在规范中表示为[[Prototype]],其值只是(对另一个对象的引用)。另一个对象是第一个对象的原型。

但是原型对象本身并不隐藏,您可以通过Object.create显式地设置对象的原型。

代码语言:javascript
复制
var foo = {x: 42};
var bar = Object.create(foo);

console.log(bar.x); // 42
console.log(Object.getPrototypeOf(bar) === foo); // true

在本例中,foobar的原型。

原型对象既是父对象的属性,也是对象本身。

首先,不只是一个原型对象。任何对象都可以充当原型,并且有许多不同的原型对象。当我们说“原型对象”时,我们实际上指的是具有原型“角色”的对象,而不是特定“类型”的对象。原型对象和非原型对象之间没有明显的区别。

我不太清楚您所说的“父对象的属性”是什么意思。对象是非属性,最多可以是属性值。从这个意义上说,是的,作为原型的对象必须是另一个对象的内部[[Prototype]]属性的值。

但是,这与两个对象之间的所有其他关系并没有太大的不同(所以没有什么特别的)。在下面的示例中,bar是一个对象,也分配给foo的一个属性

代码语言:javascript
复制
var bar = {};
var foo = {bar: bar};

对象与原型对象相同吗?

不是的。

Object是(构造函数)函数,用于创建对象。var obj = new Object();var obj = {};是一样的。然而,使用对象文本({...})更方便,这就是为什么您没有看到new Object被大量使用的原因。

对于每个构造函数C,以下都是正确的:

代码语言:javascript
复制
Object.getPrototypeOf(new C()) === C.prototype

也就是说,C.prototype属性的值成为通过new C创建的C新实例的原型。

Object.prototype实际上是Object中有趣的部分,也是最重要的部分。你可能听说过“原型链”。因为原型只是一个对象,它本身就是一个原型,一个对象,等等。这条链必须在某个地方结束。Object.prototype是位于基本上每条原型链末尾的值。

有许多原型链,因为每个不是原语值(布尔值、数字、字符串、空、未定义、符号)的值都是一个对象(包括函数、正则表达式、数组、日期等)。

如果不是,什么是对象--全局对象?

请参见上面的。它不是全局对象,浏览器中的全局对象是window,虽然每个JavaScript环境都必须有一个全局对象,但至少到目前为止,语言中还没有标准的方法来引用它(编辑:我猜全局环境中的this会采用一种跨平台的方式)。

它/它们与窗口对象或全局对象的关系如何?

唯一的关系是:

您可能认为全局对象的原型也是Object.prototype但情况并不一定如此。

阅读材料:

  • 你不知道JS:这个&对象原型;在这个系列中,gettify的所有书籍都非常棒。
  • http://felix-kling.de/jsbasics/;厚颜无耻地插入一些非常简洁的幻灯片,这些幻灯片是我为我不时教的JavaScript类创建的。可能不够详细,无法单独使用(并且包含排版;)
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53199341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档