本文详细解析JavaScript中this关键字在类定义与函数调用中的作用。通过Person类示例,阐明var声明的私有变量与this声明的公有变量的访问差异;结合window.test()案例,说明this指向调用者对象的规则,帮助开发者掌握变量可见性与方法调用的核心逻辑。
JavaScript中this关键字的作用域与访问权限解析
在JavaScript中构建类时,若需确保通过new实例化的对象共享通用变量或函数,使用this关键字是最佳方案。
作为面向对象语言,JavaScript必然涉及访问权限控制,这与this关键字的使用紧密相关。下文将通过具体示例演示类的访问权限机制。
代码实现如下:
//Person类定义
function Person(){
var name="abc";//使用var声明的变量为类内部私有变量,外部无法直接访问
var age = 20;
this.name2="edg";//使用this声明的变量为公开变量,外部可直接访问
this.show=function(){//show方法为公开方法,外部可调用,且能访问类内部私有变量
window.alert(name);
}
function show2(){//show2方法为类内部私有方法,外部无法访问
}
}
var p1 = new Person();
document.writeln(p1.name2+p1.name);
p1.show();
//Person类定义 www.jb51.net
function Person(){
var name="abc";//使用var声明的变量为类内部私有变量,外部无法直接访问
var age = 20;
this.name2="edg";//使用this声明的变量为公开变量,外部可直接访问
this.show=function(){//show方法为公开方法,外部可调用,且能访问类内部私有变量
window.alert(name);
}
function show2(){//show2方法为类内部私有方法,外部无法访问
}
}
var p1 = new Person();
document.writeln(p1.name2+p1.name);
p1.show();私有与公有变量的访问机制
上述Person函数实际上定义了一个类,类名为Person。其中,以var关键字声明的变量均为私有变量,仅在类内部可见;
而通过this关键字声明的变量则为公有变量,允许在类外部进行访问。
只需公开一个方法,即可实现外部对类内部私有变量的访问。例如this.show=function(){}定义了一个共有方法,
该方法在类外部亦可被调用。反之,直接声明的方法默认属于私有方法。
接下来看另一个示例:
代码实现如下:
function test(){
alert(this.v);
}
var v = 902;
window.test();
function test(){
alert(this.v);
}
var v = 902;
window.test();this指向调用者对象的规则
代码较为简短,其核心含义是:方法内部的this指向调用该方法的对象。例如,当window对象调用test方法时,
test方法内部的this.v即指代window对象(即外部全局作用域)中是否定义了v变量。经查看可知,
全局作用域中定义了var v = 902;,因此该方法调用的是v的值。