- Published on
理解Javascript中的__proto__
- Authors
- Name
- Pursue
Summary
proto可以看作是一个公开对象原型的内部访问器,大多数浏览器都实现了该属性。一个对象如何访问原型链上的方法,都是取决于proto的,因此暴露了这个属性则势必会为对象的安全性带来影响,所以 MDN 并不推荐随意改变一个对象的原型链,但是我们还是有必要了解它。
Syntax
function Circle() {
this.name = 'circle'
}
Circle.prototype.area = function () {
return 1.0
}
var shape = {},
circle = new Circle()
console.log(shape.__proto__) // Object {}
// Set the object prototype
shape.__proto__ = circle
// Get the object prototype
console.log(shape.__proto__) // Circle {name: 'circle', area: function}
上述例子中的 shape 对象首先由 Object 构造而来,因为起原型链指向 Object.在改变其原型链指向 circle 后,则 shape 成为了 Circle 的实例,因为 shape 具有原生属性 name 和原型方法 area。
需要注意的是,如果将上述代码改为shape.__proto__ = Circle.prototype
的话,则 shape.__prototype 将输出 Circle {area: function}
.
要理解proto,可以参考 Object.creat()方法。