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