如何从其他文件为对象声明函数?
正确给类原型添加外部文件中函数的方法
我帮你找出问题所在啦,你的代码里有几个关键错误导致没能成功给类原型添加外部函数,咱们一步步修正:
你代码里的核心问题
- 错误调用了函数而非赋值引用:你写的
classFile.prototype.exampleFunction2 = SecondFile.logMessage()里加了(),这会立即执行logMessage函数,把它的返回值(这里是undefined)赋值给原型方法,而不是把函数本身挂载上去。 - 变量名大小写不匹配:JS是大小写敏感的,你引入的是
secondFile,但赋值时写的是SecondFile,这会直接抛出“未定义”的错误。 - 类实例化时机不当:你在
classFile.js里直接执行了new Example('example'),这会导致引入类的时候就自动创建实例,通常我们会把实例化逻辑放到使用类的文件里。
修正后的完整代码示例
1. classFile.js(类定义文件)
class Example { constructor(param){ this.param = param; // 把参数存储到实例上,方便后续方法访问 } exampleFunction(){ console.log('原方法输出:', this.param); } } module.exports = Example; // 移除这里的new Example,把实例化放到主文件中
2. secondFile.js(外部方法文件)
module.exports = { // 这里用普通函数而非箭头函数! exampleFunction2: function() { console.log('外部方法输出:', this.param); } }
3. 主文件(比如index.js)
const Example = require('./classFile'); const secondFile = require('./secondFile'); // 正确赋值:直接挂载函数引用,不要加(),且变量名匹配 Example.prototype.exampleFunction2 = secondFile.exampleFunction2; // 创建实例并测试 const myInstance = new Example('测试参数'); myInstance.exampleFunction(); // 输出:原方法输出: 测试参数 myInstance.exampleFunction2(); // 输出:外部方法输出: 测试参数
关键注意点:为什么不用箭头函数?
箭头函数没有自己的this,它的this会继承自定义时的外部作用域,而类原型方法需要this指向当前类实例,这样才能访问实例的属性(比如this.param)。如果用箭头函数的话,this会指向模块的全局作用域,无法获取实例的属性,所以这里必须用普通函数。
内容的提问来源于stack exchange,提问作者perentiormity
相关产品推荐
相关产品推荐

