【问题标题】:Why does object instances not show the properties of their Constructor.prototype even when they are inherited in JS?为什么对象实例即使在 JS 中被继承,也不显示其 Constructor.prototype 的属性?
【发布时间】:2020-11-01 02:17:21
【问题描述】:

我对 JS 中的原型有些疑问。这太混乱了。 所以这是我正在使用的名为 Human 的构造函数。

function Human(fname,lname){
    this.fname = fname;
    this.lname = lname; 
    this.fullname = function(){
         return this.fname + this.lname ;   
    }
}

我用它创建了两个对象 person1 和 person2

var person1 = new Human('Barbara','Corcoran');
var person2 = new Human('Mark','Cuban');

所以我知道 person1 和 person2 将获得 fname、lname 和 fullname 作为其属性 但 如果我说

Human.prototype.name = "Alfred";
Human.prototype.age = 28;

在这里,人类获得了更多属性,即 - 姓名和年龄。 person1 和 person2 是否继承 name 和 age ? 如果是,那么为什么在我控制台记录 person1 和 person2 时它不显示?如果不是,那为什么?

【问题讨论】:

    标签: javascript oop object constructor


    【解决方案1】:

    name age 存在于 person1 和 person2 的原型中,而不是它们自己的属性。

    JS中的继承是用原型链实现的。

    原型链意味着如果您访问 person1 和 person2 中的 name age 属性,他们将尝试找到自己的属性。但是,如果实例没有这些属性,它们会尝试在其原型中查找这些属性,直到原型顶部。

    通常,控制台不会显示原型链中的属性。如果你想检查这些属性,你应该检查__proto__ 属性。

    顺便说一句,你可能需要这个

    Object.getPrototypeOf(person1)===person1.__proto__ //true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多