Javascript 原型继承和对象构造函数
Javascript prototype inheritance and Object Constructor
我有以下一段用于学习JS的代码。
function CircleArea(x)
{
this.x = x;
}
CircleArea.prototype =
{
area: function () {
return 22 / 7 * this.x * this.x;
}
};
var CalArea = new CircleArea(7);
if( CalArea.constructor === CircleArea.prototype.constructor)
{
alert(CalArea.area());
}
我通过将对象文字分配给 CircleArea.prototype 来解耦继承链,然后使用 CircleArea 构造函数定义 CalArea 对象。现在CalArea.constructor和CircleArea.prototype.constructor基本上都是Object constructor而不是CircleArea构造函数,但是当我在alert函数中调用CalArea.area()时,this.x获取7作为其值,而值7作为参数传递给CircleArea构造函数,而不是传递给CalArea.constructor和CircleArea.prototype构造函数现在引用的对象构造函数。
我不确定你所说的"解耦继承链"是什么意思,但对我来说,你正在经历的是预期的行为。
在 CircleArea
的实例上调用area()
。
area()
使用this.x
.
this
在这种情况下,您的CircleArea
实例具有x=7
。
所以你的计算是22 / 7 * 7 * 7
如果你期待不同的东西,你能解释一下你的期望以及你为什么期待它吗?
我猜您的混淆源于this
设置为调用函数的对象实例,因此调用CalArea.area()
意味着this
设置为CalArea
因此this.x
与CalArea.x
相同
当你将一个对象分配给原型(CircleArea.prototype = {area: fun..})时,你只需调度默认的CircleArea.prototype,因此CircleArea.prototype.constructor也被调度。但是当你使用运算符new时,CircleArea仍然是构造函数,它返回CircleArea的对象实例({x:参数,proto:{ area:fun,proto:...}})。你不能使用新的CalArea.constructor(),但可以新建CircleArea()。new CalArea.constructor() 返回 Object 实例
- javascript中对象构造函数中的var属性与this.properties
- jQuery双对象构造函数-例如$($(this))
- Javascript - 如何向对象构造函数添加属性
- 对象构造函数并在 Javascript 中返回
- Javascript对象构造函数-奇怪的行为
- 这个对象构造函数阻止我的脚本运行
- 自推式对象构造函数
- 模型对象构造函数中的节点mysql查询
- 在挖空中引用对象构造函数外部视图模型的属性
- 将服务器端数据馈送到 JavaScript 对象构造函数中
- 在对象构造函数中,如何为属性附加自定义键值
- 使用对象构造函数管理 cssClasses 时出错
- Javascript:创建一个对象构造函数
- 对象构造函数 - 管理循环动画
- JavaScript 对象构造函数未显示稳定的值
- 构造函数属性值应该是什么 .a 原型构造函数或对象构造函数本身
- Javascript:函数作为对象构造函数不清楚
- 如何从对象构造函数执行回调
- 如何在对象构造函数内动态处理鼠标移动
- 对象构造函数语法错误