Javascript为什么不能将方法添加到子类原型?

时间:2017-01-22 19:47:20

标签: javascript

假设我有一个Person对象我想继承并创建另一个子类,如下所示:

var Person={
    type:"human",
    greet: function(){
        console.log("hi im a human");
    },
}
Person.prototype.sayName = function(){
    return this.name;
}

继承如下:

var john = Object.create(Person);
john.walk = function(){
    console.log("john is walking");
}

为什么 cant 我将walk方法添加到john s prototype,如下所示:

john.prototype.walk = function(){
   console.log("john is walking");
}

1 个答案:

答案 0 :(得分:1)

尝试加载包含JavaScript的HTML页面,其中包含前2个(隐式"正确""打算")段落Google Chrome浏览器("版本55.0.2883.87(64-) bit)"在Kubuntu上16)已经显示错误(尝试F-12键并点击控制台查看)。

由于您没有明确描述如何使用JS代码,这至少是一个没有触发错误消息的版本,希望它符合您的要求(如果没有,请详细说明):< / p>

如果您创建的文件test1.js包含:

class Person {
        constructor(name) {
                    this.name = name;
        }
}
Person.prototype.name ="no name";
Person.prototype.type ="human";
Person.prototype.greet = function() {
console.log("hi im a human");
};
Person.prototype.sayName =  function(){
return this.name;
}
var john = new Person("john");
john.walk = function() {
console.log(this.name+" is walking");
}

然后加载包含

的HTML文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="test1.js"></script>
</head>
<body>
<script type="text/javascript">
john.greet();
console.log(john.sayName());
john.walk();
</script>
</body>
</html>

将在控制台上输出:

  

嗨,我是一个人

     

约翰

     

约翰正在走路