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

时间:2014-11-28 11:37:38

标签: javascript

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

      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

1 个答案:

答案 0 :(得分:1)

构造函数方法是每个对象实例的个体。因此,你不能覆盖它们"全球"对于所有未来的实例,只能在实例本身上更改它们:

 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