能否在原型方法中调用另一个对象的原型方法?
回答:当然可以实现这种跨对象原型方法的调用!
你想要的这种在一个对象的原型方法里调用另一个对象原型方法的需求完全可行,但你的示例代码存在几个小问题,导致它无法正常运行,我来帮你修正并解释:
你的代码里的问题
- 变量声明顺序错误:你在
let App = new App(gui);这里提前使用了App构造函数,但var App的变量提升虽然会让它提前被声明,但let声明的App变量会形成暂时性死区,导致实例化时报错。 - 变量命名冲突:用
App同时作为构造函数名和实例变量名,会造成代码逻辑混乱。
修正后的可运行代码
jQuery(document).ready(function ($) { let gui = new GUI(); // 把实例变量名改成小写app,避免和构造函数App冲突 let app = new App(gui); }); // 先定义GUI构造函数和原型方法 var GUI = function() { return this; }; GUI.prototype.test = function() { console.log("Test"); }; // 再定义App构造函数和原型方法 var App = function(gui) { this.gui = gui; this.init(); return this; }; App.prototype.init = function() { // 这里通过gui实例调用它的原型方法test,完全没问题 this.gui.test(); };
原理说明
只要你能获取到另一个对象的实例引用(比如示例里的this.gui就是GUI的一个实例),就可以直接调用该实例的原型方法——因为原型方法是挂载在构造函数的prototype属性上的,所有通过该构造函数创建的实例都能继承并访问这些方法。
内容的提问来源于stack exchange,提问作者Benimo
相关产品推荐
相关产品推荐

