为什么在构造函数中的方法之前需要 'this'?

Why do you need 'this' before a method in a constructor function?

在下面的代码中,我认为原型链的工作方式(基本上)是如果子对象(在本例中为 mike)本身没有方法,它会查找原型链,通过__ proto__,查看父对象是否在其原型对象中包含它,如果包含,那么 'mike' 应该可以访问它。对吗?

如果是这样,差不多,为什么 'farewell' 不能用于 mike? 显然,我可以看出是 'this.'(或缺少 'this.')造成了差异,但是如果 __ proto__ 允许子对象访问父对象原型对象中的方法,我们为什么需要打扰有了这个。完全没有??

非常感谢!

function PersonConstructor() {
  this.greet = function sayHello() {
    console.log("hello");
  };
  farewell = function sayBye() {
    console.log("Bye");
  };
}

function personFromConstructor(name, age) {
  const person = new PersonConstructor();
  person.name = name;
  person.age = age;
  return person;
}

const mike = personFromConstructor("Mike", 30);

console.log(mike.greet); // [Function: sayHello]
console.log(mike.farewell); // undefined

这与原型没有太大关系。当您执行 new PersonConstructor() 时会发生什么,简化为:

let obj = {};
/* [ here be dragons and details about setting up prototype chains ] */
PersonConstructor.call(obj);  // `this` inside PersonConstructor is obj
return obj;

本质上,它等同于:

let obj = {};
obj.greet = function sayHello() {
  console.log("hello");
};
farewell = function sayBye() {
  console.log("Bye");
};

这应该可以说明为什么 farewell 没有以任何方式作为对象的一部分结束。