原型方法中的 this 指向调用它的实例对象,可直接通过 this.属性名 访问该实例自身属性(如构造函数中初始化的 this.name);若实例无该属性,则沿原型链查找,但同名属性会被实例自身遮蔽。

原型方法里的 this 指向调用它的实例对象,所以可以直接通过 this.属性名 访问该实例自身的属性(包括构造函数中用 this 初始化的属性)。
原型方法中 this 的指向规则
当一个方法定义在构造函数的 prototype 上,且被实例对象调用时(如 obj.method()),该方法内部的 this 自动绑定为这个实例对象。这是 JavaScript 原型机制的核心行为。
- 只要不是箭头函数、没有被显式改变
this(如call/apply/bind),原型方法中的this就是调用者本身 -
this只能访问**当前实例拥有的属性**(即在构造函数里赋值的this.xxx = xxx),不能直接访问其他实例的属性或原型上的属性(除非同名且未被遮蔽)
访问实例属性的典型写法
假设有一个构造函数:
function Person(name, age) {
this.name = name; // 实例属性
this.age = age;
}
Person.prototype.sayHello = function() {
console.log(`Hello, I'm ${this.name} and ${this.age} years old.`);
};
创建实例后调用:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
const p1 = new Person('Alice', 25);
p1.sayHello(); // Hello, I'm Alice and 25 years old.
这里的 this.name 和 this.age 就是访问 p1 这个实例对象自身的属性。
注意属性遮蔽与查找顺序
如果实例自身没有某个属性,但原型上有同名属性,this.xxx 会先找实例自身,找不到才沿原型链向上查找。但一旦实例自身有该属性,就会“遮蔽”原型上的同名属性:
-
this.name→ 先查p1.hasOwnProperty('name'),有则返回;无则继续查Person.prototype.name - 若想强制读取原型上的属性,可用
Object.getPrototypeOf(this).xxx或Person.prototype.xxx,但一般不推荐
避免常见陷阱
以下情况会导致 this 不再指向实例,从而无法访问实例属性:
- 把原型方法单独提取出来使用:
const fn = p1.sayHello; fn();→ 此时this是undefined(严格模式)或全局对象 - 在原型方法中用了箭头函数嵌套:
this不会被重新绑定,而是继承外层作用域的this,通常不是你想要的实例 - 用
call/apply显式传入了别的对象作为this,那就访问的是那个对象的属性

















