Javascript 使用“创建”创建的对象;新";关键字和用“创建的对象”;对象。创建;给出不同的结果
有人能给我解释一下为什么用“new”关键字创建的对象和用“object.create”关键字创建的对象会产生不同的结果吗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"
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