Javascript中的OOP原型和继承

Dim*_*tri 4 javascript inheritance prototype

我是Javascript的新手,我刚刚在codeAcademy完成了很长的Javascript课程.我有一些问题prototype.据我所知,prototype它主要用于继承,也可以动态定义对象的方法.

但我还是有一些问题.看看我的代码.我使用原型toString在对象Animal和另一个中定义了一个toString.当我运行它时,它显示为什么:[Object] Dumbo 4而不是[Proto] Dumbo 4

 function Animal(name, numLegs){
      this.name = name;
      this.numLegs = numLegs;

       this.toString = function(){
        return "[Object]" + this.name  + " " + this.numLegs + "\n";
        };
    }

    Animal.prototype.toString = function(){
     return "[Proto]" + this.name  + " " + this.numLegs + "\n";
    };

    var animal = new Animal("Dumbo", 4);
    console.log(animal.toString());
Run Code Online (Sandbox Code Playgroud)

Aad*_*hah 5

JavaScript是一种原型的面向对象的编程语言,它只是意味着对象继承自其他对象.在JavaScript中,当在对象上找不到属性时,解释器会尝试在对象的原型链中找到它.如果在对象的原型链中找不到该对象,则解释器返回undefined:

        null
          ^
          | [prototype]
          |
+------------------+
| Object.prototype |
+------------------+
          ^
          | [prototype]
          |
+------------------+
| Animal.prototype |
+------------------+
          ^
          | [prototype]
          |
   +------------+
   | new Animal |
   +------------+
Run Code Online (Sandbox Code Playgroud)

如你所见,var animal = new Animal("Dumbo", 4)继承自Animal.prototype.因此,当您调用animal.toString()它时,它将执行Animal构造函数中定义的函数.如果你delete animal.toString然后打电话,animal.toString那么它会打电话Animal.prototype.toString.

阅读以下博客文章,了解有关JavaScript中原型继承的更多信息:为什么原型继承很重要