JavaScript构造函数与原型链基础解析
本文解析JavaScript中构造函数的工作原理,重点阐述this关键字在实例化过程中的指向,以及如何通过prototype属性为对象定义共享方法。文章通过代码示例演示了动态添加方法的机制及执行顺序的影响,帮助开发者理解对象属性与方法的生命周期。
JavaScript构造函数基础
代码如下:
function A(x)
{
this.x = x;
}
var obj = new A(5);
alert(obj.x); 这段代码虽然简单,但展示了一个关键现象:通过实例化对象obj,我们成功获取了属性x,这与C#等语言中类实例的行为相似。接下来探讨该属性生成的机制。
核心在于语句this.x=x,它完成了属性的声明与赋值。这里需要明确this的含义:在构造函数执行时,this指向当前正在创建的实例对象。
因此,this代表的是刚刚通过new关键字实例化出来的obj。这使得我们可以直接通过this在构造函数内部访问和设置实例的属性或方法。
那么,如何在构造函数中定义方法呢?通常有两种方式:直接在构造函数内定义或通过原型链定义。
原型方法定义与动态添加
代码如下:
function A(x,y)
{
this.x = x;
this.y = y;
A.prototype.FunX = function(){alert(x)};
A.prototype.FunY = function(){alert(y)};
}
var obj = new A(5,10);
alert(obj.x);
alert(obj.y);
obj.FunX();
obj.FunY(); 执行结果依次弹出5、10、5、10。可以看到,通过A.prototype定义的方法FunX和FunY被成功绑定到原型上。
代码如下:
A.prototype.FunX = function(){alert(x)};
A.prototype.FunY = function(){alert(y)}; 上述两行代码定义了FunX和FunY两个方法。如果需要在运行时临时为A函数添加方法,应如何处理?
代码如下:
function A(x,y)
{
this.x = x;
this.y = y;
}
A.prototype.FunX = function(){alert("5")};
var obj = new A(5,10);
alert(obj.x);
alert(obj.y);
obj.FunX();
A.prototype.FunY = function(){alert("10")};
obj.FunY(); 运行结果与之前一致,但注意FunY是在实例obj创建之后才定义到原型上的。此时调用obj.FunY(),JavaScript引擎会在原型链中查找并执行该方法。如果代码顺序调整为先调用方法再定义原型,如下一段所示:
代码如下:
obj.FunY();
A.prototype.FunY = function(){alert("10")}; 此时FunY()将不会执行,因为方法定义在调用之后,原型链中尚不存在该方法。
下一篇文章将深入讲解JavaScript构造函数与原型(prototype)的更多细节,欢迎提出疑问或指正。
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
为什么JS中typeof []返回object:数组类型检测误区解析
2026-11-04 19:50:47
D3.js 新手入门:环境搭建与第一个条形图实现
2026-11-04 10:49:48
