如果更改了构造函数的原型,为什么对象的构造函数属性也会发生变化?

b科技

在以下摘自Helephant.com的代码中,如果我将一个构造函数的原型Cat.prototype = new Pet()设置为另一个对象的,Pet那么为什么它会修改其对象的构造函数rufus.constructor

constructor代表创建它的函数。父级如何修改已创建的父级?

//PET CONSTRUCTOR
function Pet(name, species, hello) 
{   this.name = name;
    this.species = species;
    this.hello = hello; }

//CAT CONSTRUCTOR
function Cat(name, hello, breed, whiskerLength)
{   this.name = name;
    this.hello = hello;
    this.breed = breed;
    this.whiskerLength = whiskerLength;}

//SETTING CAT's PROTOTYPE to A NEW PET OBJECT.  
Cat.prototype = new Pet();

//CREATING A NEW CAT OBJECT
var rufus= new Cat("rufus", "miaow", "Maine Coon", 7);

//CALLING CAT OBJ's CONSTRUCTOR PROPERTY
rufus.constructor;

//OUTPUT
function Pet(name, species, hello) 
{   
this.name = name;
this.species = species;
this.hello = hello; }

是设计上的故障。任何人都可以解释这种行为。它带来什么好处?

马克斯·科雷茨基(Max Koretskyi)

当您键入时rufus.constructor,JavaScript会检查rufus对象上是否有此类属性它不在那里,因为您没有在这里创建它。然后它向上遍历原型链,并找到此属性,该属性rufus.__proto__.__proto__指向Pet函数并输出该函数。

这是更详细的说明。声明函数时:

function Pet() { /* ..code.. */ }

解释器根据您的声明创建新的函数对象。与该函数一起,将prototype创建并填充属性。此默认值prototype是具有属性的对象constructor,该属性设置为函数本身。就我们而言Pet

Pet.prototype = { constructor: Pet}

该对象成为的.__proto__new Pet()rufus通过到达rufus.__proto__.__proto__这正是从中constructor读取属性的对象

rufus.hasOwnProperty('constructor') // false;    
Object.getPrototypeOf(rufus).hasOwnProperty('constructor') // false;    
Object.getPrototypeOf(Object.getPrototypeOf(rufus)).hasOwnProperty('constructor') // true

这就是为什么您会constructor在许多JavaScript继承示例中看到在子对象上创建属性的原因

Cat.prototype = Object.create(Pet.prototype); // it's better to use this instead of new Pet()
Cat.prototype.constructor = Pet;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

调用构造函数后,为什么initializer_list中的vector <int>的值会发生变化?

来自分类Dev

为什么宽度属性在更改 html 中的填充属性时会发生变化

来自分类Dev

为什么将PIL.Image.open()函数对象的尺寸转换为numpy数组后会发生变化

来自分类Dev

为什么在Java中调用setTimeout函数之前,我的值会发生变化?

来自分类Dev

为什么在运行“插入”函数后我的数字变量会发生变化?

来自分类Dev

从函数返回时,为什么矢量内部的指针会发生变化?

来自分类Dev

为什么在将函数作为回调传递时“this”会发生变化?

来自分类Dev

通过JNI在Java代码中运行EGL函数时,为什么我对EGL函数的调用会发生变化?

来自分类Dev

新的JavaScript原型更改了构造函数

来自分类Dev

为什么遍历方阵时会发生变化?

来自分类Dev

为什么[0]会发生变化?

来自分类Dev

为什么“to”道具在点击时会发生变化?

来自分类Dev

为什么索引值会发生变化?

来自分类Dev

如果我使用传播运算符,为什么状态会发生变化?

来自分类Dev

每次屏幕发生变化时都会调用屏幕的构造函数

来自分类Dev

在 C++ 中使用构造函数时结构数据发生变化

来自分类Dev

Python 列表(和其他对象)在函数内部建立索引时会发生变化

来自分类Dev

为什么更改新列表时原始列表会发生变化?

来自分类Java

为什么弹簧引导程序属性在不同的配置文件中会发生变化?

来自分类Dev

为什么克隆时原始 django 对象会发生变化?

来自分类Dev

在什么情况下,azure 函数的授权密钥会发生变化?

来自分类Dev

当在复合命令 w/ || 中调用该函数时,为什么该函数中 set -e 的行为会发生变化 或者 &&?

来自分类Dev

迅速-函数调用后对象发生变化

来自分类Dev

从函数返回后,什么会导致 C++ 对象的类型信息发生变化?

来自分类Dev

函数的哈希码在原子内部发生变化...为什么会这样?

来自分类Dev

为什么输入数组在递归函数内发生变化?

来自分类Dev

在异步函数调用期间,如果对象的属性值发生变化,JavaScript中的对象的属性值会如何处理?

来自分类Dev

如果Flexbox容器中的“ nowrap”溢出,为什么移动视口尺寸会发生变化?

来自分类Dev

如果 XPath 内部的内容发生变化,它会发生变化吗?

Related 相关文章

  1. 1

    调用构造函数后,为什么initializer_list中的vector <int>的值会发生变化?

  2. 2

    为什么宽度属性在更改 html 中的填充属性时会发生变化

  3. 3

    为什么将PIL.Image.open()函数对象的尺寸转换为numpy数组后会发生变化

  4. 4

    为什么在Java中调用setTimeout函数之前,我的值会发生变化?

  5. 5

    为什么在运行“插入”函数后我的数字变量会发生变化?

  6. 6

    从函数返回时,为什么矢量内部的指针会发生变化?

  7. 7

    为什么在将函数作为回调传递时“this”会发生变化?

  8. 8

    通过JNI在Java代码中运行EGL函数时,为什么我对EGL函数的调用会发生变化?

  9. 9

    新的JavaScript原型更改了构造函数

  10. 10

    为什么遍历方阵时会发生变化?

  11. 11

    为什么[0]会发生变化?

  12. 12

    为什么“to”道具在点击时会发生变化?

  13. 13

    为什么索引值会发生变化?

  14. 14

    如果我使用传播运算符,为什么状态会发生变化?

  15. 15

    每次屏幕发生变化时都会调用屏幕的构造函数

  16. 16

    在 C++ 中使用构造函数时结构数据发生变化

  17. 17

    Python 列表(和其他对象)在函数内部建立索引时会发生变化

  18. 18

    为什么更改新列表时原始列表会发生变化?

  19. 19

    为什么弹簧引导程序属性在不同的配置文件中会发生变化?

  20. 20

    为什么克隆时原始 django 对象会发生变化?

  21. 21

    在什么情况下,azure 函数的授权密钥会发生变化?

  22. 22

    当在复合命令 w/ || 中调用该函数时,为什么该函数中 set -e 的行为会发生变化 或者 &&?

  23. 23

    迅速-函数调用后对象发生变化

  24. 24

    从函数返回后,什么会导致 C++ 对象的类型信息发生变化?

  25. 25

    函数的哈希码在原子内部发生变化...为什么会这样?

  26. 26

    为什么输入数组在递归函数内发生变化?

  27. 27

    在异步函数调用期间,如果对象的属性值发生变化,JavaScript中的对象的属性值会如何处理?

  28. 28

    如果Flexbox容器中的“ nowrap”溢出,为什么移动视口尺寸会发生变化?

  29. 29

    如果 XPath 内部的内容发生变化,它会发生变化吗?

热门标签

归档