我想学习如何在javascript中使用原型,我知道原型可以帮助我例如在许多对象之间共享函数
var car = function(color, speed) {
this.color = color;
this.speed = speed;
}
car.prototype.doors = 4;
var honda = new car('black', 'beep');
var kea = new car('black', 'meep');
document.write(kea.doors+' '+ honda.doors);
honda.doors = 2;
document.write('<br/>');
document.write(kea.doors+' '+ honda.doors);
car.prototype.doors = 4;
document.write('<br/>');
document.write(kea.doors+' '+ honda.doors);
我在这里看了一段视频:Here
那家伙说,如果我更新原型的值,那么变量将在我的所有对象中改变但是在我的例子中,当我改变它时,值没有改变。 如果我错了,请纠正我。
答案 0 :(得分:4)
它们仅针对未明确更改此属性的对象进行更改。我在最后一步更改了代码以设置5个门:
car.prototype.doors = 5;
https://jsfiddle.net/g1hrujL0/ 在那里,您可以看到kea对象的门数发生了变化,从而继承了原型中的值,但是由于我们已经为honda对象显式更改了此属性,因此其值不会更改。
答案 1 :(得分:1)
JavaScript对象是引用类型,而像Numbers这样的基元则不是。所以你要使用副本。当您更改honda.doors
的值时,您不会在其他任何位置更改它。要解决此问题,您可以将car.prototype.doors
作为对象放置,例如car.prototype.doors = {doors: 4};
答案 2 :(得分:1)
您编写的代码与此类似。如果您打开chrome dev工具,则可以进行验证。当你寻找honda.doors时,它会在找到4之前找到2。
car:{
color: "black",
doors: 2,
speed:"beep",
__proto__: {
constructor: function(color, speed),
doors:4,
__proto__: {}
}
}
答案 3 :(得分:1)
@Ben答案的进一步补充(它们只会更改未明确更改此属性的对象)这与删除相同如果删除当前对象属性(删除honda.doors;)然后引用它,它将获取原型属性Value。当当前对象没有该属性时调用Prototype,否则它总是引用本机属性值我希望这有助于理解原型
考虑这段代码
var car = function(color, speed) {
this.color = color;
this.speed = speed;
}
car.prototype.doors = 4;
var honda = new car('black', 'beep');
var kea = new car('black', 'meep');
console.log(kea.doors+' '+ honda.doors);
honda.doors = 2;
console.log('<br/>');
console.log(kea.doors+' '+ honda.doors);
car.prototype.doors = 4;
delete honda.doors;
console.log('<br/>');
console.log(kea.doors+' '+ honda.doors);
&#13;