我已经做了一些工作,让我的代码按照我希望的方式运行到某一点。 但是我遇到了一个问题,需要一点点指导来帮助我解决问题。
要解决的问题 代码中的注释将解释我想要存档的内容..
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的新手。
答案 0 :(得分:2)
小心这个'这个'关键词。通过在全局上下文中调用nameFoo,即:
// some code
nameFoo(arg);
// some more code
'这'将始终引用' window'。因此,当您调用myData.myName时,即使此对象调用nameFoo方法,' window'仍将在nameFoo' s'中引用。 '这'通常作用于该函数所属的对象。
如果你需要这个'要引用您的一个自定义对象,请使用函数原型方法" call"在你的myName函数中。
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]);
答案 1 :(得分:0)
我认为这在概念上可以帮助你:
// Some names in array
var my_names = ["Brent White", "John Smith"];
// Returns name array [First, Last]
function nameParse(full_name) {
return full_name.split(" ");
}
// Person object (properties)
function Person(name) {
this.full_name = name;
this.name_array = nameParse(name);
this.first_name = this.name_array[0];
this.last_name = this.name_array[1];
}
// Create single person example
var brent = new Person(my_names[0]);
// Access properties of brent
console.log(brent);
console.log("Hey, my first name is " + brent.first_name);
// Alternate example --------- //
// Store our people here
var my_people = [];
// Create a person for each name
for (var i = 0, max = my_names.length; i < max; i += 1) {
var some_person = new Person(my_names[i]);
my_people.push(some_person);
}
console.log(my_people);