Javascript 为什么我的对象的原型未定义?
我创建了一个像这样的Javascript 为什么我的对象的原型未定义?,javascript,prototype,Javascript,Prototype,我创建了一个像这样的Car对象 var Car = Object() 然后我添加了一些属性,比如 Car.price = 5000; Car.color = "red"; 然后我创建了一个这样的实例 var car1 = Object.create(Car); 我不明白的是,当我调用car1.prototype或Car.prototype时,我得到了未定义的 根据我所读到的,每个物体都是某物的原型 有人能解释为什么它是“未定义的”吗?函数有原型。对象实例,如car1,则不会 说每个对象都是
Car
对象
var Car = Object()
然后我添加了一些属性,比如
Car.price = 5000;
Car.color = "red";
然后我创建了一个这样的实例
var car1 = Object.create(Car);
我不明白的是,当我调用car1.prototype
或Car.prototype
时,我得到了未定义的
根据我所读到的,每个物体都是某物的原型
有人能解释为什么它是“未定义的”吗?函数有原型。对象实例,如car1
,则不会
说每个对象都是某个原型的副本是正确的。默认情况下,对象是对象
“函数”原型的副本。但是,对象实例本身没有原型
将原型视为新对象的“模型”。在面向对象语言中,类
或结构
就像是新实例的严格模型。也就是说,例如,Car
类的每个实例都必须有电机。类似地,在JavaScript中,函数原型就像该函数的新实例的“模型”,但它们并不严格。从该模型创建实例后,可以添加和删除成员,因为该语言是动态的
编辑
正如Pointy所阐明的,对象实例似乎不是“model”函数prototype
属性的副本。似乎原型被复制到了一个内部对象,当您试图访问实例化对象的属性时,该对象会被查找
例如:
var car1 = new Car();
// car1 now is not a copy of Car.prototype, but it has an internal object that is.
car1.motor = new V8Motor();
// even though motor is not a property of car1, this will work because JavaScript will find this property in the car1 prototype as it's not a member of the instance itself
每个物体都是某物的原型
不是。每个对象都有一个原型(根对象除外)。但是,只有函数具有原型
属性
该属性的值将成为通过将函数作为构造函数调用而创建的对象的原型(例如,var obj1=new Constr();
)
我不明白的是,当我调用car1.prototype
或Car.prototype
时,我得到了未定义的
如前所述,只有函数具有prototype
属性car1
和Car
都是对象,因此没有这样的属性
要获取任意对象的原型,可以使用:
然后我创建了它的一个实例,比如var car1=Object.create(Car)代码>
您没有创建Car
的实例。如果您创建了一个新对象并将其原型显式设置为Car
。或者,您可以将Car
定义为构造函数:
function Car(price, color) {
this.price = price;
this.color = color;
}
var car1 = new Car(5000, 'red');
既然Car
是一个函数,Car.prototype
将产生car1
的原型,即
Car.prototype === Object.getPrototypeOf(car1);
另请参见Uhh。。。这不是JavaScript中原型的工作方式。原型未复制到新对象。如何不复制?原型引用从构造函数复制到新构造对象的内部属性。在执行属性查找时,如果对象没有直接具有特定名称的属性,则会参考原型链。您的编辑仍然不正确。没有复制任何内容,新对象只是获取对Car.prototype
的引用。此外,分配car1.motor
与原型没有任何关系。它只是在对象上创建属性。
Car.prototype === Object.getPrototypeOf(car1);