Can';我不能真正理解Javascript中构造函数和原型的关系
我是Javascript的初学者,在理解构造函数和原型属性之间的关系时遇到了困难 我知道Prototype对象有一个指向构造函数的Can';我不能真正理解Javascript中构造函数和原型的关系,javascript,constructor,prototype,Javascript,Constructor,Prototype,我是Javascript的初学者,在理解构造函数和原型属性之间的关系时遇到了困难 我知道Prototype对象有一个指向构造函数的构造函数属性。构造函数有一个prototype属性,指向prototype对象 以下是我试图理解的代码(我的问题在代码中有注释): 为什么要打印“汽车”对象?不是构造函数不是原型对象吗?为什么不打印原型对象 这就是Chrome(或您使用的浏览器)命名对象的方式。如果您仔细查看这些属性,它实际上是汽车。原型: 我正在尝试将构造函数中的prototype属性更改为“Ve
构造函数属性。构造函数有一个prototype
属性,指向prototype对象
以下是我试图理解的代码(我的问题在代码中有注释):
为什么要打印“汽车”对象?不是构造函数不是原型对象吗?为什么不打印原型对象
这就是Chrome(或您使用的浏览器)命名对象的方式。如果您仔细查看这些属性,它实际上是汽车。原型
:
我正在尝试将构造函数中的prototype属性更改为“Vehicle”对象,这样做对吗
不能更改现有对象的原型,只能对其进行扩展。设置Car.prototype=车辆
只会为汽车的未来实例更改原型,现有的实例仍将引用原始原型对象,该对象没有getName
属性:
// create a new instance after setting the new prototype
var myCar2 = new Car();
// yields false
console.log(Object.getPrototypeOf(myCar) === Object.getPrototypeOf(myCar2));
这实际上与原型无关,而与JavaScript中赋值和引用的工作方式无关。假设我有以下对象:
var foo = {
bar: {
answer: 42
}
};
假设我将foo.bar
分配给另一个对象的属性:
var baz = {};
baz.xyz = foo.bar;
现在将foo.bar
设置为其他值,如foo.bar={}
,不会更改baz.xyz
的值,它仍然会引用以前的对象
只有扩展原始对象(扩展原型)或更改其属性才会产生效果,因为foo.bar
和baz.xyz
都引用同一对象:
foo.bar.answer = 21;
console.log(baz.xyz.answer); // shows 21
// console.log(foo.bar === baz.xyz); // yields true
构造函数
属性几乎毫无用处。它没有实际用途,可以被脚本覆盖,所以不可靠。你可能想看看这个:@JamesBlack谢谢,我来看看。
foo.bar.answer = 21;
console.log(baz.xyz.answer); // shows 21
// console.log(foo.bar === baz.xyz); // yields true