我已经完成了一些脚步工作,以使此代码能够按自己的意愿进行操作。
但是,我遇到了一些问题,需要一些指导来帮助我解决问题。
要解决的问题
代码中的注释将解释我要归档的内容。
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]);