的JavaScript
在书中,我读到为了让对象从原型继承,你需要将这个原型分配给属性views.request_dict
。在同一本书中,写道Javascript引擎使用这个原则来组织原型继承链,因为每个原型又具有相似的属性链。
但是当我尝试在实践中使用它时,我得到了意想不到的结果:
.constructor.prototype
但是在我读过的书中,没有关于function Point2d() {this.x = 0; this.y = 0;};
Point2d.prototype.message = function() {
return 'I am Point2d: (' + this.x + ','+ this.y + ')';
};
let p = new Point2d;
let json = JSON.stringify(p);
let pp = JSON.parse(json);
// I need the parsed object be the Point2d instance,
// therefore I do it:
pp.constructor = Point2d;
p.constructor == pp.constructor; // true
// But I see it:
pp.constructor.prototype == Point2d.prototype; // true
Object.getPrototypeOf(pp) == Point2d.prototype; // false
console.log(p.message()); // it works fine
// Oops... Here I get the error: 'pp.message is not a function'.
console.log(pp.message());
// Ok... I see that each object also has the __proto__ property.
// Change it:
pp.__proto__ = Point2d.prototype;
console.log(pp.message()); // now it works fine too
属性的文章。
为什么__proto__
指向另一个原型?为什么这个属性存在?为什么不仅使用__proto__
?