请参阅以下代码
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 )
答案 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
属性的值未定义。