1、使用 new 调用构造函数
当你用 new 来调用一个函数时,JS 会做三件事:
- 创建一个新对象 obj。
- 把构造函数的 this 指向这个新对象 obj。
- 执行构造函数体内的代码,通常会给 this 添加属性和方法。
- 默认返回 this(即新创建的对象)。
示例
function Person(name) {
this.name = name;
this.sayHello = function() {
console.log(`Hello, my name is ${this.name}`);
}
}
const p1 = new Person("Alice");
p1.sayHello(); // Hello, my name is Alice
这里,this 指向 p1,即新创建的对象。
2、不使用 new 调用构造函数
如果直接调用函数而不使用 new,this 指向调用时的环境:
严格模式 (‘use strict’):this 为 undefined
非严格模式:this 为全局对象(浏览器中是 window)
示例:
function Person(name) {
this.name = name;
}
Person("Bob"); // 普通调用
console.log(window.name); // "Bob"(非严格模式)
3、构造函数返回对象
如果构造函数显式返回一个对象,那么 new 会返回这个对象,而不是 this:
function Person(name) {
this.name = name;
return { age: 30 };
}
const p = new Person("Alice");
console.log(p); // { age: 30 }
如果返回的是非对象(如字符串、数字),this 仍然被返回。

4、构造函数和原型方法
如果你在 prototype 上添加方法,这些方法属于共享的原型对象,但 this 的指向依然取决于调用者。
示例:
function Person(name) {
this.name = name; // 实例属性
}
// 原型方法
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name}`);
};
const p1 = new Person("Alice");
p1.sayHello(); // Hello, my name is Alice
这里:
sayHello 是 Person.prototype 上的方法。
当你通过 p1.sayHello() 调用时,this 指向 **调用它的对象 p1。
this 的本质
在 JS 中,函数执行时的 this 由调用方式决定:
- 对象调用(obj.fn()) → this 指向调用者 obj
- 普通函数调用(fn()) → 严格模式下 undefined,非严格模式下指向全局对象
- 构造函数调用(new Fn()) → this 指向新对象
- 箭头函数 → this 继承自定义函数外层的作用域
所以,即使方法在原型上,this 依然是调用它的实例对象。
示例对比
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log(this.name);
};
const p1 = new Person("Alice");
const p2 = new Person("Bob");
p1.sayHello(); // Alice
p2.sayHello(); // Bob
const f = p1.sayHello;
f(); // 严格模式下 undefined, 非严格模式下 window.name
说明:原型方法和实例方法本质上都是函数。this 并不固定在原型上,而是调用它的对象。
5、总结
构造函数原型方法的 this 指向调用它的对象实例。
如果直接把方法取出来调用(函数调用),this 不再指向实例,而受严格模式或全局环境影响。
原型方法适合共享函数,避免每个实例都重复创建同一个函数。
文章来源网上,侵权请联系博主
题外话
黑客&网络安全如何学习
如果你也对网路安全技术感兴趣,但是又没有合适的学习资源,我可以把私藏的网安学习资料免费共享给你们,来看看有哪些东西。
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的的网安视频教程,内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,100多本网安电子书,最新学习路线图和工具安装包都有,不用担心学不全。


1302

被折叠的 条评论
为什么被折叠?



