首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript的原型链

JavaScript的原型链
EN

Stack Overflow用户
提问于 2017-03-10 22:29:49
回答 3查看 141关注 0票数 4

我正在学习JavaScript中的原型链,并写了一个演示,但我不能理解结果。

这是我的演示:

代码语言:javascript
复制
function A(){}
const c = new A();
A.prototype.sex = "girl";
A.prototype={
  name:"q",
  age:12
};
console.log(A.prototype.name);
console.log(c.name);
console.log(c.sex);

这是输出:

代码语言:javascript
复制
"q"
undefined
"girl"

为什么console.log(c.name)输出undefined

EN

回答 3

Stack Overflow用户

发布于 2017-03-10 23:11:38

A是您的构造函数,这意味着当您对新创建的对象进行“初始化”时,您可以在该函数中放入对其执行操作所需的所有内容

在您的情况下,您什么也不做。构造函数有一个prototype属性,它是您将由new A()创建的所有对象都将继承的对象

如果您没有显式地将一个原型设置为您的构造函数,那么您的原型默认情况下是一个空对象。

所以在这一行:const c = new A(); c继承了一个空对象,当你设置:

代码语言:javascript
复制
A.prototype.sex = "girl";

你在你的空对象上创建了一个属性性别,并给它分配了"girl“

但是这个对象和你之前的"new“是一样的(相同的引用)。所以c仍然有一个指向它的参考,但是当你这样做的时候:

代码语言:javascript
复制
A.prototype={
  name:"q",
  age:12
};

您更改了A的原型,即更改了A.prototype的引用,但您不再使用new。所以实际上没有任何对象具有

代码语言:javascript
复制
{
      name:"q",
      age:12
    }

作为原型。C仍然使用前一个对象(记住是空的)对象作为原型。

但是如果你这样做了:const d = new A(),那么d.name将存在,但d.sex将不存在

票数 3
EN

Stack Overflow用户

发布于 2017-03-10 23:31:26

下面是根据JavaScript spec构造新对象的步骤。

正如您在步骤5和6中看到的,构造对象的内部原型是在构造过程中确定和捕获的。

因此,该对象不维护对"Whatever .prototype value A在任何给定时间拥有的值“的原型引用。它维护了对“执行new A()A.prototype具有的值”的原型引用。

如果您要在替换原型后再次执行new A(),则此时创建的对象将具有该新原型。

  1. 设obj为新建的原生ECMAScript对象,
  2. 设置obj的所有内部方法,如8.12所示。
  3. 设置obj的[

]内部属性为obj的[Extensible]内部属性为true.

  1. Let 为调用F的[Get]内部属性的值,参数为Object is Object。将obj的[ prototype ]内部属性设置为调用类型类型(Proto) is not Object,将obj的[Prototype]内部属性设置为标准的内置对象prototype对象,如15.2.4中所述。调用F的[ proto.
  2. If ]内部属性,将obj作为this值提供,并将传递到[Construct]的参数列表作为参数提供给[Construct],然后返回result.
  3. Return obj。
  4. 如果类型(

)是object,则返回result.

  1. Return obj。
票数 1
EN

Stack Overflow用户

发布于 2017-03-10 22:42:14

1)创建一个空类

2)添加一个静态属性(来自原型)性别

3)你给你的类分配一个新的原型,但是c保留旧的原型。

所以'A‘是最新的,但是'c’仍然是旧的原型,所以名字不存在,但是在更改原型之前设置的性别属性存在,所以你可以找到它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42720787

复制
相关文章

相似问题

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