关于javascript对象中原型的混淆

关于javascript对象中原型的混淆,javascript,Javascript,在JS中,根据我的理解,原型指的是它的构造函数所指的对象 那么说, function Dog(name){ this.name = name; } Dog.prototype.bark = function(){alert("Woof");} 这意味着现在,狗的原型有了吠叫属性 var dog = new Dog("Doggo"); dog.bark(); 工作正常并发出警报Woof 但是我补充说, function Cat(name){

在JS中,根据我的理解,原型指的是它的构造函数所指的对象

那么说,

function Dog(name){
    this.name = name;
}
Dog.prototype.bark = function(){alert("Woof");}
这意味着现在,狗的原型有了
吠叫
属性

var dog = new Dog("Doggo");
dog.bark();
工作正常并发出警报
Woof

但是我补充说,

function Cat(name){
    this.name = name;
}

var cat = new Cat("Little kitten");
cat.bark(); //Nothing happens, why?
Dog和Cat的原型都指向同一个Object.prototype(有点像Object类是JAVA中所有已创建类的超类,我知道原型和类不一样,但结构相似)


因此,当我通过添加
bark
属性来修改Dog的原型时,它也应该反映在Cat中,因为它们指向同一个对象?我的理解有什么问题?

你认为两个函数指向同一个原型对象的说法是错误的。它们都有不同的原型对象。您可以验证:
console.log(Dog.prototype==Cat.prototype)
(将为“false”)在定义构造函数时,它会接收新创建的原型对象。我认为在互联网上有很多关于如何在JavaScript中正确设置原型继承的例子。使用
类…扩展
语法甚至变得更容易了。@Pointy好的,Dog.prototype==Cat.prototype打印为false。我不知道为什么,因为我这里没有任何其他构造函数,Objects.prototype就像所有JS对象的基本原型,所以他们不应该指向它吗?另外,dog.prototype==cat.prototype打印为true。Ugh JS令人困惑。@Pointy好的,所以在即时级别,函数原型指的是在函数声明时新创建的原型对象&这就是为什么它Dog.prototype==Cat.prototype打印false?谢谢,我会读更多关于这个的内容。你断言两个函数指向同一个原型对象是错误的。它们都有不同的原型对象。您可以验证:
console.log(Dog.prototype==Cat.prototype)
(将为“false”)在定义构造函数时,它会接收新创建的原型对象。我认为在互联网上有很多关于如何在JavaScript中正确设置原型继承的例子。使用
类…扩展
语法甚至变得更容易了。@Pointy好的,Dog.prototype==Cat.prototype打印为false。我不知道为什么,因为我这里没有任何其他构造函数,Objects.prototype就像所有JS对象的基本原型,所以他们不应该指向它吗?另外,dog.prototype==cat.prototype打印为true。Ugh JS令人困惑。@Pointy好的,所以在即时级别,函数原型指的是在函数声明时新创建的原型对象&这就是为什么它Dog.prototype==Cat.prototype打印false?谢谢,我会读更多关于这个的。