Javascript 调用另一个对象';另一个对象中的方法

Javascript 调用另一个对象';另一个对象中的方法,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 }

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

示例:

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();
当前尝试:

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()函数

问题:

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();
调用方法中另一个对象的方法的正确方法是什么?范围如何

ObjectA必须实例化才能调用其方法吗

那么
apply()
call()
方法呢?我不知道它们在这种情况下是如何应用的

最后的评论


我想提前感谢大家的意见。我最近才深入研究了javascript的OOP。这个看似简单的问题是我一整天都在努力解决的问题,我来到这里作为最后的解决办法。

这里有一个输入错误,而不是
ObjectA.doWork();
使用
ObjectA.doWork())

有一个输入错误,而不是
ObjectA.doWork();
使用
ObjectA.doWork();

在我找到你的输入错误之后:

function OjbectA() {}
应该是
函数ObjectA(){}

这就是你面临错误的原因



毕竟我发现了你的打字错误:

function OjbectA() {}
应该是
函数ObjectA(){}

这就是你面临错误的原因


调用方法中另一个对象的方法的正确方法是什么?范围如何

没有一种“正确”的方法。您可能希望能够调用ObjectA实例的方法(即ObjectA.prototype的方法),但有一个ObjectB实例,如下所示:

它将调用该方法并将ObjectB的实例设置为

ObjectA必须实例化才能调用其方法吗

如果您的意思是“是否必须实例化ObjectA的实例来调用其方法”,则为“否”,如上所示。您可以直接在构造函数的原型上调用该方法

那么apply()或call()方法呢?我不知道它们在这种情况下是如何应用的

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

其他答案 你能解释一下ObjectA.prototype.doWork.call(这个)的机制吗

它调用该方法并将其this设置为提供的对象。中解释了如何将值分配给该方法的规则

ObjectA.prototype.doWork(这个)会以同样的方式工作吗

否。它调用函数,将其this设置为ObjectA.prototype,并将调用执行上下文中的this值作为第一个参数提供。例如,如果它是浏览器中的全局代码,则有效地:

ObjectA.prototype.doWork(window);
调用方法中另一个对象的方法的正确方法是什么?范围如何

没有一种“正确”的方法。您可能希望能够调用ObjectA实例的方法(即ObjectA.prototype的方法),但有一个ObjectB实例,如下所示:

它将调用该方法并将ObjectB的实例设置为

ObjectA必须实例化才能调用其方法吗

如果您的意思是“是否必须实例化ObjectA的实例来调用其方法”,则为“否”,如上所示。您可以直接在构造函数的原型上调用该方法

那么apply()或call()方法呢?我不知道它们在这种情况下是如何应用的

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

其他答案 你能解释一下ObjectA.prototype.doWork.call(这个)的机制吗

它调用该方法并将其this设置为提供的对象。中解释了如何将值分配给该方法的规则

ObjectA.prototype.doWork(这个)会以同样的方式工作吗

否。它调用函数,将其this设置为ObjectA.prototype,并将调用执行上下文中的this值作为第一个参数提供。例如,如果它是浏览器中的全局代码,则有效地:

ObjectA.prototype.doWork(window);

可以直接从原型中调用它

使用apply将函数执行过程中的
this
的值更改为提供的值,因此其本质上是将调用中的
this
转发给它自己。 您也可以使用
call
,区别在于它接受参数的方式,apply接受数组,而call接受参数列表

ObjectB.prototype.method = function() {
  ObjectA.prototype.doWork.apply(this);
}
但是,当然
ObjectB
不一定具有与
ObjectA
相同的属性,因此请确保编写的方法尽可能通用。为了便于使用,请使用文档化的概念,而不是内部实现细节

这个例子再次说明了数组的通用方法是如何被记录的,并说明了它工作所需的条件

如果你只是想公开一个“实用函数”,就把它放在对象本身上

ObjectA.doWork = function(obj) {
};

可以直接从原型中调用它

使用apply将函数执行过程中的
this
的值更改为提供的值,因此其本质上是将调用中的
this
转发给它自己。 您也可以使用
call
,区别在于它接受参数的方式,apply接受数组,而call接受参数列表

ObjectB.prototype.method = function() {
  ObjectA.prototype.doWork.apply(this);
}
但是,当然
ObjectB
不一定具有与
ObjectA
相同的属性,因此请确保编写的方法尽可能通用。为了便于使用,请使用文档化的概念,而不是内部实现细节

这个例子再次说明了数组的通用方法是如何被记录的,并说明了它工作所需的条件

如果你只是想公开一个“实用函数”,就把它放在对象本身上

ObjectA.doWork = function(obj) {
};
Th