在JavaScript中,在构造函数之外更改构造函数方法?

在JavaScript中,在构造函数之外更改构造函数方法?,javascript,Javascript,在下面的代码中,我将Person.sayHello方法改为说“再见”。调试器显示该方法已更改,但构造函数方法仍在使用中。为什么? function Person(){ this.sayHello = function(){ console.log("Hello"); } } Person.sayHello = function(){ console.log("Bye"

在下面的代码中,我将Person.sayHello方法改为说“再见”。调试器显示该方法已更改,但构造函数方法仍在使用中。为什么?

      function Person(){
          this.sayHello = function(){
              console.log("Hello");
          }
      }

      Person.sayHello = function(){
            console.log("Bye");
          }

      console.log(Person.sayHello);
      // function (){console.log("Bye");}

      var p = new Person();      
      p.sayHello();
      //Hello

构造函数方法对于每个对象实例都是独立的。因此,您不能再次为所有未来实例“全局”覆盖它们,只能在实例本身上更改它们:

 function Person() {
     this.sayHello = function () {
         console.log("Hello");
     }
 }

 var p = new Person();

 p.sayHello = function () {
     console.log("Bye");
 }

 p.sayHello();

另外,
Person.sayHello
应该是
Person.prototype.sayHello

Person.prototype.sayHello不会重写构造函数sayHello方法。但是,我得到了答案。Thanks@BrianBishop这就是我想说的,是的:)哇,我不仅仅问了一个重复的问题,我甚至使用了相同的Person对象和相同的sayHello()方法。这太奇怪了!!