JavaScript继承机制

标签 javascript inheritance

我现在正在学习JS继承,有一些不清楚的地方。 考虑以下代码:

function Mammal(pName){
    var name = pName; //"private" variable name
    this.getName = function(){ //return name via closure
        return name;
    }
    this.mammalStuff = function(){
        console.log("im a mammal!!");
    }
}
Mammal.prototype.speak = function(){
    console.log("im a "+ this.getName()+" !")  //every Mammal can speak
}

function Cat(){
    this.catStuff = function(){
        console.log("cat says mew");
    }
}

Cat.prototype = new Mammal(); //All cat objects inherit all Mammal characteristics

var houseCat = new Cat("Kittie");

现在,houseCat 可以访问 mammalStuffcatStuff 属性。现在,在当前的代码配置中,每当我调用 getName\speak 方法时,houseCat 都会打印 undefined 。为什么我不能直接使用 name 属性的父类构造函数?

最佳答案

当你请求 JS 对象的属性时,JS 会遍历原型(prototype)链,直到找到该属性。因此对象继承自它们的原型(prototype)。

构造函数只是一个函数。当执行一个函数(Cat 的构造函数)时,没有规则同时调用其他函数(Mammal 的构造函数)。

您可以明确强制执行此操作。例如

function Cat(name){
    Mammal.call(this, name);
    this.catStuff = function(){
        console.log("cat says mew");
    }
}

关于JavaScript继承机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28027707/

相关文章:

javascript - 组件对 Mounted() 发出 GET 请求,并向子组件发出 props 响应。如果我输入直接转到子组件的 URL 会发生什么?

javascript - 动态编辑值

c++ - 关于 C++ 中的多重继承的问题?

java - 从另一个类java访问主类中的链表

ruby-on-rails - Rails Controller 继承与关注点和混合

javascript - 如何退出 javascript 函数?

javascript - 什么是一个好的正则表达式来匹配以 `.js` 但不是 '.bin.js' 结尾的任何文件名

javascript - 使用 JS 从提示中做出选择后出现图片

java - 继承内部类的私有(private)方法

Java 多级继承 - 一级类中 protected 实例变量