Javascript 使用“创建”创建的对象;新";关键字和用“创建的对象”;对象。创建;给出不同的结果

Javascript 使用“创建”创建的对象;新";关键字和用“创建的对象”;对象。创建;给出不同的结果,javascript,jquery,Javascript,Jquery,有人能给我解释一下为什么用“new”关键字创建的对象和用“object.create”关键字创建的对象会产生不同的结果吗 function Car (desc) { this.desc = 'test'; this.color = "red"; } Car.prototype.getInfo = function() { return 'A ' + this.color + ' ' + this.desc + '.'; } //if i create object with "new"

有人能给我解释一下为什么用“new”关键字创建的对象和用“object.create”关键字创建的对象会产生不同的结果吗

function Car (desc) {
this.desc = 'test';
this.color = "red";
}

Car.prototype.getInfo = function() {
  return 'A ' + this.color + ' ' + this.desc + '.';
}

//if i create object with "new" it's alert "A blue test"
var car =  new Car();
car.color = "blue";
alert(car.getInfo());  //A blue test

// but if i create object with it's alert "A blue undefined"
var car =  Object.create(Car.prototype);
car.color = "blue";
alert(car.getInfo()); //A blue undefined

Object.create用于继承。 “new”关键字用于创建原型定义的对象实例


因此,在您的示例中使用Object.create时,它是汽车的原型,而不是汽车的实例

这两段代码(通常)是等效的:

var car = new Car();
以及:


在您的代码中,构造函数没有运行,因此这些属性没有设置。

汽车原型没有
color
属性。因此,第二辆
汽车
没有
颜色
。请在节点控制台上执行此操作。然后记录第一辆车,您将了解其结构。这可能会帮助您,,,我在使用“Object.create”时获得颜色属性,但“desc”属性未定义。但如果我使用“new”属性,则会显示颜色和desc。请参阅我的问题properly@CMS你能帮我解决这个问题吗?)“这是汽车的原型,而不是汽车的实例。”-不,那不对。它只是一个
Car
上没有运行构造函数。如果我用你的方式“Car.call(Car);”那么所有东西都显示为未定义。甚至我以前显示的颜色值也未定义:)
var car = Object.create(Car.prototype);
Car.call(car);  // this second line is missing from your code