为什么在这个例子中.__proto__ = .prototype
Why doesn't .__proto__ = .prototype in this example?
我知道" __proto__
是一个对象的内部属性,指向它的原型"所以在下面的示例中,我认为c2.prototype
等于 c2.__proto__
。为什么它们没有相同的价值?
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
window.onload = function() {
var Circle = function(radius) {
this.radius = radius;
this.doubleRadius = function() {
return this.radius * 2;
}
}
var c1 = new Circle(4);
Circle.prototype.area = function() {
return Math.PI*this.radius*this.radius;
}
var c2 = new Circle(5);
console.log('--- first circle object, created before adding "area" method');
console.log(c1.radius);
console.log(c1.doubleRadius());
console.log(c1.area());
console.log('--- second circle object, created after adding "area" method');
console.log(c2.radius);
console.log(c2.doubleRadius());
console.log(c2.area());
console.log(c2.prototype); // undefined
console.log(c2.__proto__); // Object { area=function() }
}
</script>
</head>
<body>
</body>
</html>
简单的答案是c2.constructor.prototype == c2.__proto__
构造函数具有.prototype
属性。实例没有,但它们具有.__proto__
和.constructor
属性
obj.__proto__
是obj.constructor.prototype
的简短版本,而不是obj.prototype
console.log(c2.constructor.prototype === c2.__proto__); //true
console.log(c2.prototype === c2.__proto__); //false
请尝试以下操作。
console.log(c2.constructor.prototype);
console.log(c2.__proto__);
实际上,当 c2 是一个对象时,.__proto__
== .constructor.prototype
。
相关文章:
- 直接在函数声明上使用function.prototype.bind
- 如何迭代Array.prototype函数
- Object.prototype using 'this'
- 在不兼容的接收器上调用的方法Set.prototype.add未定义
- 为什么可以't我用Set对象调用Array.prototype.map
- ExtJS 4 Object.prototype fail
- 如何通过Prototype或jquery移除子类的父类基类
- 复选框:使用Array.prototype.forEach调用推送选中订单,
- 如何将事件处理程序分配给proto.io开关
- 将setTimeout()包装器实现为Element.prototype中的方法
- Object.prototype.hasOwnProperty.call() vs Object.prototype.h
- 如何通过 Function.prototype.apply() 更改调用函数的参数
- Function.prototype.call和Function.protoype.all只应用一个参数
- 使用JavaScript或Prototype获取表单中的所有控件并启用它们
- JavaScript-使用B.prototype=new A()继承数组
- 转换类似数组的对象Array.prototype.slice或Array.from
- requestAnimationFrame的Function.prototype.bind导致属性不可读
- JavaScript - String.newProperty vs. String.prototype.newProp
- 如何将参数应用于String.prototype.format函数
- 为什么要将Array.prototype.slice.call与参数一起使用