function Graph() {
this.vertices = [];
this.edges = [];
}
Graph.prototype = {
addVertex: function(v){
this.vertices.push(v);
}
};
var g = new Graph();
如果我首先重新定义原型,然后使用构造函数functio创建一个对象(如示例中所示),一切正常(即我可以调用g.addVertex("a");
)。但如果我交换Graph.prototype = {...}
和var g = new Graph();
- 我就不能再调用g.addVertex()
函数(方法)了。为什么呢?
答案 0 :(得分:2)
因为您在创建实例后重新定义了整个原型,这意味着所有新实例都将获得新原型,但已创建的实例不会。实例不会知道它来自哪个构造函数的原型已完全改变。
答案 1 :(得分:2)
通常情况下,更改现有对象的原型是很好的。构造函数。但是,您要为Graph.prototype分配一个全新的对象,因此该实例在其__proto__
属性中的引用不再是
与Graph.prototype相同。
如果您将方法添加到现有原型中,请执行以下操作:
Graph.prototype.addVertex = function(v){
this.vertices.push(v)
}
然后它会以任何顺序工作。