Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的对象的原型未定义?_Javascript_Prototype - Fatal编程技术网

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);