javascript - 在另一个对象中调用另一个对象的方法

标签 javascript

如何在当前方法中调用另一个对象的方法?

示例:

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.

查看第一个问题的答案。是否使用callapply取决于需要传递的参数以及您是否打算首先对它们进行任何处理。

其他答案

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/

相关文章:

javascript 回调函数 onreadystatechange,在一个简单的 ajax 示例中

javascript - 在 Javascript 中处理相机式鼠标移动(启用连续鼠标移动)

javascript - javascript引擎是否对多维数组进行任何优化?

javascript - 任何人都可以帮助我使用以下 JScript 吗?

javascript - 使用 jQuery 或其他库的 Apple Cover-flow 效果?

javascript - 使用 jquery 更改链接中的 html 文本

javascript - 使用javascript的磁性光标移动

javascript - Firebase如何在javascript中更新子值

javascript - D3 时间序列热图

javascript - 我的回调出了什么问题?