在ES6中,如何使用构造函数创建JavaScript对象的方法

时间:2017-12-25 12:49:35

标签: javascript-objects

请参阅以下代码

class Person{
   constructor(){
       this.name = 'John';
    }

   displayName(){
   console.log(this.name);
   }
}

let john = new Person();

console.log(john.displayName());
console.log(john.__proto__.displayName()); //It doesn't print the name
console.log(john);

我理解(从上面的例子中)ES6中的方法作为成员放置在构造函数的原型中(即Person)。 ie:分配给john的Person.prototype.displayName()。 proto .displayName()

我的问题是,我可以通过键入console.log(john.displayName())将名称打印到控制台,但不能使用console.log(john。 proto .displayName( ))。

此外,我可以通过输入console.log(john。 proto .displayName)打印方法定义,但我无法调用它。(使用 proto

2 个答案:

答案 0 :(得分:0)

当访问john.__proto__.displayName时,你基本上是“静态地”调用它,这意味着构造函数没有运行,并且任何属性都指定给它“this”,那么this.name就是undefined { {1}}。

答案 1 :(得分:0)

当您访问john.displayName()时,您正在访问具有值'John'的name属性。这是因为Person构造函数已经为它运行,而属性name被赋值为'John'。

但是当您运行john.__proto__.displayName()时,您正在访问john对象的原型的属性,即。 Person。这里没有运行构造函数。因此name属性的值未定义。