扩展/覆盖原型函数,同时保持外部文件的作用域

Extend/override prototype function while keeping scope of external file

本文关键字:外部 文件 作用域 覆盖 原型 函数 扩展      更新时间:2023-09-26

在外部js (person.js)文件中,我有这样的内容:

var user = 'John';
function Person() { );
Person.prototype.sayHello = function() { 
  console.log('Hello ' + user);
}
Person.prototype.init = function() { 
  this.sayHello();
}

如何在不修改原始文件的情况下重写javascript中的sayHello方法?如果我在加载后但在调用init()之前预定义它,它可能会起作用,但我无法访问person.js范围内定义的user变量。

在另一个文件:

Person.prototype.sayHello = function() { 
  console.log('Good morning ' + user);
}
var p = new Person();
p.init();

var user在任何函数之外都会在全局作用域中创建一个变量,因此您可以通过简单地使用它的名称从任何其他文件访问它。

然而,如果你的代码运行在nodejs环境中,文件有自己的作用域,那么你就很幸运了——JavaScript没有很好的自省工具让你窥探外部作用域。