如何在当前方法中调用另一个对象的方法?
示例:
function OjbectA() {}
ObjectA.prototype.doWork = function () {
alert('do work');
}
var objectA = new ObjectA();
function ObjectB() {}
ObjectB.prototype.method = function() {
// How to call Object A's doWork() method
}
当前尝试:
// Call doWork
ObjectA.doWork();
错误:“类型错误:doWork() 函数未定义。
问题:
在方法内调用另一个对象的方法的正确方法是什么。范围界定怎么样?
ObjectA 是否必须实例化才能调用它的方法?
apply()
或 call()
方法怎么样?我很困惑它们如何应用于这种情况。
最后评论
我想提前感谢大家的意见。我最近才开始深入研究 javascript 的 OOP。这个看似简单的问题是我纠结了一整天的问题,最后才来到这里的。
最佳答案
What is the correct way to call the method of another object WITHIN the method. What about scoping?
没有一种“正确”的方法。假设您希望能够调用 ObjectA 实例的方法(即 ObjectA.prototype 的方法),但将 ObjectB 的实例作为 this,因此:
ObjectB.prototype.method = function() {
// How to call Object A's doWork() method
ObjectA.prototype.doWork.call(this);
}
这将调用该方法并将ObjectB的实例设置为this。
Does ObjectA have to instantiated to call it's methods?
如果您的意思是“ObjectA 的实例必须实例化才能调用其方法”,那么不需要,如上所示。您可以直接调用构造函数原型(prototype)上的方法。
What about the apply() or call() method? I am confused how they apply in this situation.
查看第一个问题的答案。是否使用call或apply取决于需要传递的参数以及您是否打算首先对它们进行任何处理。
其他答案
Could you explain the mechanics of ObjectA.prototype.doWork.call(this) a little more?
它调用该方法并将其 this 设置为提供的对象。 EMCA–2626 §10.4.3 中解释了如何将值分配给 this 的规则。 .
Would ObjectA.prototype.doWork(this) work just the same way?
没有。它调用该函数,将其 this 设置为 ObjectA.prototype 并从调用执行上下文提供 this 的值作为第一个参数。例如如果它是浏览器中的全局代码,则有效:
ObjectA.prototype.doWork(window);
关于javascript - 在另一个对象中调用另一个对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25173868/