原型问题1—原型对象的替换

Posted jokes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型问题1—原型对象的替换相关的知识,希望对你有一定的参考价值。

function Animal(){
    this.type = "Animal"; 
}
 Animal.prototype.say = function(){
     console.log(this.type); 
}
 function Cat(){
       this.vioce = "喵喵喵"; 
} 
Cat.prototype.shout = function(){ 
console.log(this.vioce);
 } 
Cat.prototype = new Animal();

 let cat1 = new Cat();
 cat1.say(); //"Animal" 
cat1.shuot(); //err,报错无此函数

为什么cat1会找不到因为:

Cat.prototype.shout = function(){ console.log(this.vioce); } 
已经为Cat.prototype 指向了一个对象{    shout = function(){ console.log(this.vioce); }   }

所以Cat.prototype  = new Animal()

会重新把Cat.prototype的指向更改为{ new Cat() }对象;

所以会找不到:

 

解决办法:

先 Cat.prototype  = new Animal() 创建一个指向,

然后:Cat.prototype.shout = function(){ console.log(this.vioce); }  这一步是给对象{ new Animal() } 添加了一个属性

 


以上是关于原型问题1—原型对象的替换的主要内容,如果未能解决你的问题,请参考以下文章

原型对象

TypeError:对象原型可能只是一个对象或空:未定义

原型陷阱

javascript --- 原型初探七日谈

面向对象

js中构造函数的原型添加成员的两种方式