我已经完成了一些脚步工作,以使此代码能够按自己的意愿进行操作。
但是,我遇到了一些问题,需要一些指导来帮助我解决问题。

要解决的问题
代码中的注释将解释我要归档的内容。

var myArr = ["Brent white","brentw.white"];

function nameFoo (name){
 var strSplit = name.split(" "); // splitting Brent White
 var nameStr = this. myArr; // fetching Brent white string from myArr
console.log (strSplit,myArr[0]);
}

nameFoo("Brent White"); // calling nameFoo function

var myData = {
  someData:"somedata",
  someMoreData:"moredata",
  myName:function(){
// I need to call nameFoo function through myName method.
// My hypothesis is that return will use the (this) keyword within the object?
  }
};

// Here I need to call the method to have access my nameFoo? Correct me if I am wrong?
// Is this method invocation?
// Please help..Lost here...


概括起来,我想myName方法调用nameFoo函数。 nameFoo然后将给我myName方法的结果。

如果有人能表现出足够的友善去示范如何完成最后一步,那么我将不胜感激。

向我指出正确的方向也将不胜感激。
PS我是JS新手。

最佳答案

请小心使用“ this”关键字。通过在全局上下文中调用nameFoo,即:

// some code
nameFoo(arg);
// some more code


“ this”将始终指“ window”。因此,当您调用myData.myName时,即使该对象调用了nameFoo方法,“ window”仍将在nameFoo的“ this”中引用。 “ this”通常范围是功能所属的对象。

如果您需要“ this”来引用您的一个自定义对象,请在myName函数中使用Function原型方法“ call”。

var myData = {
   ...
   ...
   myName: function() {
      nameFoo.call(this, someArgument);
   };


请注意,someArgument将是传递给'nameFoo'的参数-如果不提供参数,则会引发错误。由您决定要传递的内容。

有关Function.prototype.call的更多信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

有关Function.prototype.apply的更多信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

两者之间唯一真正的区别是如何为所调用的函数提供参数。使用“ call”,您可以用逗号分隔参数(就像正常执行函数时一样)。

例如:nameFoo.apply(this, arg1, arg2, arg3);

使用“ apply”,您可以将参数作为数组提供。

例如:nameFoo.apply(this, [arg1, arg2, arg3]);

10-07 14:41